Grafik bewegen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

CodeFish

Betreff: Grafik bewegen

BeitragMi, Feb 25, 2004 3:55
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, ich hab versucht laut Tutorial eine Grafik zu bewegen, geht aber nicht?

cursor = LoadImage("Bilder\cursor.bmp")
z = 1
x = 100

While z < 10
Cls

DrawImage cursor,x,100
If KeyHit(scancode) Then x = x + 5

Wend

Stop

Was stimmt da noch nicht ?
 

René Meyer

BeitragMi, Feb 25, 2004 4:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Einiges. :-)

Zum einen machst Du das Ende der Schleife vom Wert von z abhängig. z ändert aber nie ihren Wert, daher endet die Schleife nicht.

Die Bewegung machst Du von einem Tastendruck abhängig. KeyHit() erwartet einen Tastencode als Parameter. Du übergibst aber eine Variable, und die ist - da Du ihr keinen Wert zugewiesen hast - 0.

Dann solltest Du Dich mit dem Prinzip der Doppelpufferung vertraut machen. Dein Bild wird in schneller Folge gelöscht und neu gezeichnet; das flimmert. Wenn Du Blitz Plus benutzt, funktioniert es so, wie Du es gemacht hast, überhaupt nicht.
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb

Travis

BeitragMi, Feb 25, 2004 13:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal ein einfaches Beispiel dazu:

Code: [AUSKLAPPEN]

Graphics 640, 480, 16, 2
SetBuffer BackBuffer()

x = 320: y = 240

Repeat
Cls

Text 0,0, "Benutze die Pfeiltasten zum Bewegen des Kästchens."
Text 0,20, "Koordinaten: " + x + "/" + y

If KeyDown(200) Then y = y - 5 ; hoch
If KeyDown(208) Then y = y + 5 ; runter
If KeyDown(203) Then x = x - 5 ; links
If KeyDown(205) Then x = x + 5 ; rechts

Rect x-2,y-2,4,4,1 ; Ersatz für das Bild

Flip
Until KeyHit(1)


Wenn du aber einen Cursor bewegen willst, würde sich ja vielleicht eine Maussteuerung anbieten. Die ist auch einfacher anzuwenden.

Code: [AUSKLAPPEN]

Graphics 640, 480, 16, 0
SetBuffer BackBuffer()

Repeat
Cls

Text 0,0, "Benutze die Maus zum Bewegen des Kästchens."
Text 0,20, "Koordinaten: " + MouseX() + "/" + MouseY()

Color 255,0,0
Rect MouseX()-4,MouseY()-4,8,8,1 ; Ersatz für das Bild

Flip
Until KeyHit(1)


Die Befehle MouseX() und MouseY() geben immer die aktuellen Koordinaten der Maus zurück und können wie Variablen eingesetzt werden. Wink
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

CodeFish

BeitragMi, Feb 25, 2004 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ok erstmal danke.
Ich lern da ja ertsnoch, und zu den KexBefehlen jhab ich nicht wirklich viel nützliches in der Hilfe gefundne.

Das mit der Maus hab ich auch schon hinbekommen.
 

CodeFish

BeitragDi, März 02, 2004 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, brauch mal wieder eure Hilfe, ich will ne Abfrage das der Spieler den Bildschirm nicht verlassen kann. Aber es Funzt net so richtig.

[code]

; Initialisierung
Graphics 640, 480, 32
SetBuffer BackBuffer()
Dim Frame(3.2)
Speed = 4
x = 320
y = 400

; Grafik
Global Player = LoadImage("Bilder/communicator.bmp")

; Daten festlegen
Frame(0.0) = 0
Frame(0.1) = 100
Frame(1.0) = 101
Frame(1.1) = 539
Frame(2.0) = 540
Frame(2.1) = 640

Repeat
Cls

; Spieler bewegen

If KeyDown(200) Then y = y - Speed ; hoch
If KeyDown(208) Then y = y + Speed ; runter
If KeyDown(203) Then x = x - Speed ; links
If KeyDown(205) Then x = x + Speed ; rechts

If x < Frame(0.1) Then x = x + Speed
If x > Frame(2.0) Then x = x - Speed

DrawImage Player, x, y

Flip

Until KeyHit(1)

[code]

mit Frame(2.0) gehts nicht, aber mit Frame(1.1) gehts zb? Woran ligt das?[/code]

Travis

BeitragDi, März 02, 2004 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei deiner Bedingung für den rechten Bildschirmrand "Frame(2.0)" wird dein Spieler erst dann gestoppt, wenn er sich exakt außerhalb des Bildschirmes befindet. Du musst das noch berücksichtigen, indem du z.B. schreibst:

Code: [AUSKLAPPEN]

If x > Frame(2.0)-SpielerBildBreiteInPixeln Then x = x - Speed
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

CodeFish

BeitragMi, März 03, 2004 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, wenn ich das mache, geht es zwar, aber verstehen tu ich es noch net, denn wenn ich Frame(1.1) zb nehme gehts normal?

Travis

BeitragMi, März 03, 2004 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Das müßtest du doch selbst feststellen können oder? Ich verstehe sowieso nicht, was diese "Frame(xyz)" zollen. Wenn sich dein Spieler nur in einem bestimmten rechteckigen Bereich bewegen soll, dann reichen doch 4 Werte. Linkes, rechtes, oberes und unteres Limit. Und wenn dann irgendwas nicht funktioniert, lass dir doch mal die Zahlenwerte der entsprechenden Grenze auf dem Bildschirm ausgeben:

Code: [AUSKLAPPEN]

...
Repeat
Cls

Text 0,0, "Spieler: " + x + "/" + y
Text 0,10, "Rechtes Limit:" + Frame(2.1)

...


Wenn ich Variablen nehme, dann nenne ich sie immer
Code: [AUSKLAPPEN]

MinX = 0
MinY = 0
MaxX = 640
MaxY = 480


Und falls diese Grenzen immer konstant bleiben, könntest du auch direkt die Zahlenwerte einsetzen.

[/quote]
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group