Bild mit Pfeiltasten bewegen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Trunxx

Betreff: Bild mit Pfeiltasten bewegen

BeitragSa, Mai 01, 2004 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Ich bin neu in BlitzBasic und würde gerne wissen wie ich ein Bild mit den Pfeiltasten bewegen kann.

Ich habe ein Besispiel gefunden in dem ein Bild durch die Maus bewegt wird und ein Beispiel in dem eine "Schlange" durch die Pfeiltasten bewegt wird.

In der Onlinehilfe habe ich die Funktion [url="http://www.blitzbase.de/befehle2d/imagexhandle.htm"]IMAGEXHANDLE[/url] gefunden aber mir fällt nicht ein wie ich die benutzen könnte.
Irgendwie muss ich die x und y Koordinaten des Bildes in eine Variable speichern, um das Bild dann durch
Code: [AUSKLAPPEN]

If KeyHit(205) Then ; rechts
xplus = 1
yplus = 0
EndIf

bewegen zu können!?

Grüsse Very Happy

Travis

BeitragSa, Mai 01, 2004 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist doch ganz einfach. Wenn du was ganz simples haben möchtest, änderst du bei Tastendruck einfach direkt die Variablen des Bildes. In diesem Fall X und Y.

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

x = 400: y = 300: speed = 5

Repeat
Cls

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

Oval x-2,y-2,4,4,1

Flip
Until KeyHit(1)
End
www.funforge.org

Ich hasse WASD-Steuerung.

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

Trunxx

BeitragSa, Mai 01, 2004 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Super, Danke Very Happy

Ich habe jetzt folgenden Code
Code: [AUSKLAPPEN]

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

;Bilder laden
Global bild1 = LoadImage("bild1.bmp") ; Bild1
Global bild2 = LoadImage("bild2.bmp") ; Bild2

;----Bewegungsglobals----
Global x = 400
Global y = 300
Global speed = 5

; Hauptschleife
Repeat
Cls

bilderzeichnen
bewegen
kollision

Flip
Until KeyHit(1)
End


;-------------Bilder ausgeben-----------------
Function bilderzeichnen()


;Bilder Ausgeben
DrawImage bild2, 400, 400, frame

End Function
;------------------------------------------------------------


;---------------------bewegen------------------------------
Function 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

DrawImage bild1,x-2,y-2

End Function
;--------------------------------------------


;---------------Kollision-------------------
Function kollision()

If ImagesCollide(bild1, x, y, frame1, bild2, 400,400, frame2) Then
bild2 = LoadImage("kollision.bmp")
DrawImage bild2, 400, 400, frame
EndIf

End Function


Funktioniert soweit auch alles super.

Habe jetzt aber noch drei Fragen:
- Kann ich den Code noch irgendwie optimieren?
- Brauche ich das frame bei DrawImage und die frame1 und frame2 bei ImagesCollide?
- Wenn bild1 jetzt auf bild2 trifft, wird bild2 zu kollision.bmp -> wird blau.
Jetzt möchte ich aber dass wenn bild1 die Kollisionskoordinaten wieder verlässt bild ursprünglichen bild2 wird. Welche Schleife muss ich da nehmen?
Ich habe While...Wend probiert, aber da verhängt bild1 bei Kollision.


thx Smile

Travis

BeitragSa, Mai 01, 2004 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Codestyle finde ich schon OK, alles schön in Funktionen und übersichtlich.

Die Sache mit der Kollision habe ich jetzt so gelöst, dass ich die beiden Bilder (für Kollision und für Nicht-Kollision) mit einem extra Namen geladen habe. Und je nachdem ob jetzt eine Kollision stattfindet oder nicht, wird das entsprechende Bild angezeigt. Hier hattest du für beide Bilder den gleichen Namen verwendet, deswegen änderte sich das Bild auch nach der Kollision nicht mehr.

Ich habe die entsprechenden Stellen im Code kommentiert. So sollte es laufen:

Code: [AUSKLAPPEN]

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

;Bilder laden
Global bild1 = LoadImage("bild1.bmp") ; Bild1
Global bild2 = LoadImage("bild2.bmp") ; Bild2
Global bild2kol = LoadImage("kollision.bmp")
; Das Bild für die Kollision muss einen extra Namen bekommen
; und am Anfang geladen werden!


;----Bewegungsglobals----
Global x = 400
Global y = 300
Global speed = 5

; Hauptschleife
Repeat
Cls

bilderzeichnen
bewegen
kollision

Flip
Until KeyHit(1)
End


;-------------Bilder ausgeben-----------------
Function bilderzeichnen()
;Bilder Ausgeben
DrawImage bild2, 400, 400 ; hier braucht man kein Frame angeben!
DrawImage bild1,x-2,y-2 ; Im Sinne der Codeoptimierung habe ich das mal nach Bilderzeichnen verschoben
End Function
;------------------------------------------------------------


;---------------------bewegen------------------------------
Function 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



End Function
;--------------------------------------------


;---------------Kollision-------------------
Function kollision()

If ImagesCollide(bild1, x, y, frame1, bild2, 400,400, frame2) Then
; Wenn du hier das andere Bild lädst, bleibt es auch nach der Kollision so erhalten.
; Du must also am Anfang beide Bilder laden (mit unterschiedlichen Bezeichnungen)
; wenn jetzt die Bilder kollidieren, stellst du bild2kol ("kollisison.bmp") dar.
DrawImage bild2kol, 400, 400, frame
EndIf

End Function
www.funforge.org

Ich hasse WASD-Steuerung.

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

Trunxx

BeitragSa, Mai 01, 2004 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Yes, Funktioniert so wie ich es wollte. Big thx Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group