2D Racer
Übersicht

SnaqBetreff: 2D Racer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi,
ich wollte einen kleinen 2D racer schreiben mit dem Vorbild von dem Racer was man auf Billigkonsolen in Polen spielen kann. hier die Bilder dazu: http://nwsnaq.nw.funpic.de/gfx/spieler.bmp http://nwsnaq.nw.funpic.de/gfx/gegner.bmp http://nwsnaq.nw.funpic.de/gfx/strecke.bmp hier der Code: Code: [AUSKLAPPEN] Graphics 300,600,16,2 SetBuffer BackBuffer() SeedRnd MilliSecs() timer = CreateTimer(100) AppTitle "Racer by Snaq" ; Variablenvereinbarung Global spieler_speed Global spieler_leben Global spieler_x Global spieler_y Global punkte spieler_leben = 5 spieler_speed = 0 spieler_x = 1 spieler_y = 300 punkte = 0 ; Bilder laden spieler_gfx = LoadImage("gfx/spieler.bmp") gegner_gfx = LoadImage("gfx/gegner.bmp") strecke_gfx = LoadImage("gfx/strecke.bmp") ; Bilder ausschneiden MaskImage spieler_gfx,255,0,255 MaskImage gegner_gfx,255,0,255 ; Hintergrundfarbe auf Scharz setzen ClsColor 0,0,0 ; Schriftfarbe auf Rot stellen Color 255,0,0 ; Type für Fahrzeuge erstellen Type fahrzeug Field x Field y Field speed End Type ; neue Fahrzeuge erstellen fahrzeug.fahrzeug = New fahrzeug fahrzeug\x = Rand(0,2) fahrzeug\y = 0 fahrzeug\speed = spieler_speed fahrzeug.fahrzeug = New fahrzeug fahrzeug\x = Rand(0,2) fahrzeug\y = 200 fahrzeug\speed = spieler_speed fahrzeug.fahrzeug = New fahrzeug fahrzeug\x = Rand(0,2) fahrzeug\y = 400 fahrzeug\speed = spieler_speed ; Hauptschleife Repeat Cls ; Strecke malen DrawImage strecke_gfx,0,0 ; Fahrzeuge bewegen, auf Kollisionen prüfen, Punkte berechnen und neue Fahrzeuge erstellen For fahrzeug.fahrzeug = Each fahrzeug fahrzeug\y = fahrzeug\y + 1 + spieler_speed If fahrzeug\x = spieler_x And (ImagesCollide(spieler_gfx,spieler_x,spieler_y,0,gegner_gfx,fahrzeug\x,fahrzeug\y,0)) Then verloren() If fahrzeug\y > 600 Then Delete fahrzeug.fahrzeug punkte = punkte + 100 fahrzeugerstellen() Else DrawImage gegner_gfx,(018+(fahrzeug\x*55)),fahrzeug\y EndIf Next ; Spieler malen DrawImage spieler_gfx,(018+(spieler_x*55)),spieler_y ; Spielerfahrzeug steuern und aufpassen das es nicht ausserhalb des Bildschirmes gerät If KeyHit(205) Then spieler_x = spieler_x + 1 If KeyHit(203) Then spieler_x = spieler_x - 1 If KeyDown(208) Then spieler_y = spieler_y + 2 If KeyDown(200) Then spieler_y = spieler_y - 2 If spieler_x < 0 Then spieler_x = 0 If spieler_x > 2 Then spieler_x = 2 If spieler_y < 000 Then spieler_y = 000 If spieler_y > 529 Then spieler_y = 529 ; Spielerspeed berechnen spieler_speed = punkte/2000 ; Punkte und Speed anzeigen Text 205,010,"Punkte:" Text 205,030,punkte Text 205,060,"Speed:" Text 205,080,spieler_speed WaitTimer timer Flip 0 Until KeyHit(1) ; Funktion um neue Fahrzeuge zu erstellen Function fahrzeugerstellen() fahrzeug.fahrzeug = New fahrzeug fahrzeug\x = Rand(0,2) fahrzeug\y = 0 fahrzeug\speed = spieler_speed End Function ; Funktion um neue Fahrzeuge zu erstellen Function fortfahren() fahrzeug.fahrzeug = New fahrzeug fahrzeug\x = Rand(0,2) fahrzeug\y = 0 fahrzeug\speed = spieler_speed fahrzeug.fahrzeug = New fahrzeug fahrzeug\x = Rand(0,2) fahrzeug\y = 200 fahrzeug\speed = spieler_speed fahrzeug.fahrzeug = New fahrzeug fahrzeug\x = Rand(0,2) fahrzeug\y = 400 fahrzeug\speed = spieler_speed End Function ; Funktion verloren Function verloren() Cls spieler_leben = spieler_leben - 1 Text 150,200,"verbleibende Leben: "+spieler_leben,1,1 Text 150,220,"Weiter mit Enter",1,1 Flip Repeat Until KeyHit(28) For fahrzeug.fahrzeug = Each fahrzeug Delete fahrzeug.fahrzeug Next fortfahren() Return End Function nun mein Problem: Wenn eine Collision passiert wird die funktion verloren() ausgelöst, es wird ein leben abgezogen und dann sollen die ganzen Fahrzeuge gelöscht werden und mithilfe der Funktion fortfahren() 3 neue Fahrzeuge erstellt werden. Allerdings kann ich die vorhanden Fahrzeuge nicht löschen weil dann ein Problem in der Zeile kommt: Code: [AUSKLAPPEN] If fahrzeug\y > 600 Then
mit dem Problem "Object does not exist" Könnt ihr mir da irgendwie helfen? ~Editiert~ Bitte keine BMP Bilder direkt ins Forum einbinden. Gleich garnicht 300 KB Bitmaps! MfG D2006 |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
setz einfach hinter das löschen ein :exit
also hinter die funktion verloren...das verhindert, das nochmal auf das gelöschte object zugegriffen wird...erst wieder im nächsten schleifendurchgang auf alle noch existierenden |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Snaq |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
okay habe ich gemacht.
Das sieht jetzt so aus Code: [AUSKLAPPEN] ; Funktion verloren Function verloren() Cls spieler_leben = spieler_leben - 1 Text 150,200,"verbleibende Leben: "+spieler_leben,1,1 Text 150,220,"Weiter mit Enter",1,1 Flip Repeat Until KeyHit(28) For fahrzeug.fahrzeug = Each fahrzeug Delete fahrzeug.fahrzeug Next fortfahren() Return End Function Exit allerdings kommt jetzt das Problem "break must appear inside a loop" ich habe schon mal in der nolinehilfe nachgeschaut aber da gibt es kein Begriff break deshalb frage ich mich was ich machen muss. Kann mir da jemand weiter helfen? |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If fahrzeug\x = spieler_x And (ImagesCollide(spieler_gfx,spieler_x,spieler_y,0,gegner_gfx,fahrzeug\x,fahrzeug\y,0)) Then verloren():Exit
ersetzt mal deine zeile mit meiner....schon gehts |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Snaq |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke schön für deine hilfe, hast mir sehr geholfen und es läuft endlich dank dir
BIG THX |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group