Bild mit Pfeiltasten bewegen
Übersicht

TrunxxBetreff: Bild mit Pfeiltasten bewegen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Super, Danke ![]() 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 ![]() |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Yes, Funktioniert so wie ich es wollte. Big thx ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group