Kollisions-Abfrage
Übersicht

FleXBetreff: Kollisions-Abfrage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo!
Ich hab da son Spiel geproggt. Darin muss man mit so nem Surfer Wellen ausweichen. Wenn man aber eine Welle trifft soll "leben" um eins weniger werden. Und da is das Problem: "leben" wird nicht nur um eins weniger sonder soviel wie lange man halt darunter is. Wie kann man machen das dann "leben" nur um eins weiniger wird? Hier is der Code: Code: [AUSKLAPPEN] If ImagesCollide (surfer,sx,sy,0,sw,wx1,wy1,0) leben=leben-1 EndIf Vielen Dank schonmal ![]() |
||
AMD 3200+ 64bit / 512mb DDR / Radeon 9600XT / 5.1 Sound |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Keine Ahnung wie du das mit den Wellen gelöst hast, aber anscheinend kolidiert der Spieler ja ständig mit einer Welle, die evtl nichtmehr gezeichnent wird, aber sich doch noch im Speicher befindet?!? Kein blassen Schimmer, genauere Informationen wären also nicht wirklich schlecht! grüße |
||
http://bl4ckd0g.funpic.de |
![]() |
Merced |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß nciht genau wie das genau aussieht, aber ich geh mal davon aus, dass du mehrere Wellen hast. Wenn Du jetzt jeder Welle quasi die Eigenschaft "nocht nicht kollidiert" mitgibst und diese in "kollidiert" änderst kannst Du eine Kollision mit einer bestimmten Welle zu einem Einmalereignis machen.
Code: [AUSKLAPPEN] ; Welle erstellen blabla wcol = 0 ; evtl in einen Array oder zu einem Type dazustecken ; .... If ImagesCollide (surfer,sx,sy,0,sw,wx1,wy1,0) If wcol = 0 leben=leben-1 wcol = 1 endif EndIf Ich hoffe das löst Dein Problem |
||
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu |
FleX |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hier is der ganze code:
Code: [AUSKLAPPEN] Graphics 640,480 AppTitle "Surfer 1.2" HidePointer ;LADEN backdrop=LoadImage("gfx\wasser.png") surfern=LoadImage("gfx\surfer.bmp") surferl=LoadImage("gfx\surferl.png") surferr=LoadImage("gfx\surferr.png") surferu=LoadImage("gfx\surferu.png") surferlo=LoadImage("gfx\surferlo.png") surferlu=LoadImage("gfx\surferlu.png") surferro=LoadImage("gfx\surferro.png") surferru=LoadImage("gfx\surferru.png") sw=LoadImage ("gfx\wtest.png"); das bild von der welle ti1=LoadImage("gfx\title1.png") ti2=LoadImage("gfx\title2.png") ;VARYS SeedRnd MilliSecs() sx=310 sy=400 scroll_y=1 wx=320 wy=100 speedsurfer=4 punkte=0 leben=3 ;DER VORSPANN DrawImage ti1,0,0 WaitKey DrawImage ti2,0,0 WaitKey .hier ;BUFFER SetBuffer BackBuffer() ;*********************************************************** ;************** DIE HAUPTSCHLEIFE ************************** ;*********************************************************** Repeat Cls ;HINTERGRUND TileBlock backdrop,0,scroll_y scroll_y=scroll_y+1 If scroll_y=ImageHeight(backdrop) Then scroll_y=2 ;************************* ;******** SURFER ********* ;************************* surfer=surfern ;BEWEGUNG DES SURFERS If KeyDown(200) Then sy=sy-speedsurfer If KeyDown(208) sy=sy+speedsurfer surfer=surferu EndIf If KeyDown(203) sx=sx-speedsurfer surfer=surferl EndIf If KeyDown(205) sx=sx+speedsurfer surfer=surferr EndIf If KeyDown(200) And KeyDown(203) surfer=surferlo EndIf If KeyDown(200) And KeyDown(205) surfer=surferro EndIf If KeyDown(208) And KeyDown(203) surfer=surferlu EndIf If KeyDown(208) And KeyDown(205) surfer=surferru EndIf ;RAND If sx<0 Then sx=0 If sx>608 Then sx=608 If sy<0 Then sy=0 If sy>448 Then sy=448 ;BOOSTER If KeyDown(29) speedsurfer=6 Else speedsurfer=4 EndIf DrawImage surfer,sx,sy ;***WELLEN******* ;WELLE1 wy1=wy1+4 If wy1 > 480 wy1=-50 wx1=Rand(0,640) punkte=punkte+1 EndIf If ImagesCollide (surfer,sx,sy,0,sw,wx1,wy1,0) leben=leben-1 EndIf DrawImage sw,wx1,wy1 ;WELLE2 wy2=wy2+4 If wy2 > 480; wy2=Rand(-84,-50); wx2=Rand(0,640) punkte=punkte+1 EndIf If ImagesCollide (surfer,sx,sy,0,sw,wx2,wy2,0) leben=leben-1 EndIf DrawImage sw,wx2,wy2;;;; ;WELLE3 wy3=wy3+4 If wy3 > 480; wy3=Rand(-152,-50) wx3=Rand(0,640) punkte=punkte+1 EndIf If ImagesCollide (surfer,sx,sy,0,sw,wx3,wy3,0) leben=leben-1 EndIf DrawImage sw,wx3,wy3 ;WELLE4 wy4=wy4+4 If wy4 > 480 wy4=Rand(-152,-50); wx4=Rand(0,640) punkte=punkte+1 EndIf If ImagesCollide (surfer,sx,sy,0,sw,wx4,wy4,0) leben=leben-1 EndIf DrawImage sw,wx4,wy4 ;WELLE5 wy5=wy5+4 If wy5 > 480 wy5=Rand(-152,-50) wx5=Rand(0,640) punkte=punkte+1 EndIf If ImagesCollide (surfer,sx,sy,0,sw,wx5,wy5,0) leben=leben-1 EndIf DrawImage sw,wx5,wy5 ;WELLE6 wy6=wy6+4 If wy6 > 480 wy6=Rand(-230,50) wx6=Rand(0,640) punkte=punkte+1 EndIf If ImagesCollide (surfer,sx,sy,0,sw,wx6,wy6,0) leben=leben-1 EndIf DrawImage sw,wx6,wy6 ;WELLE7 wy7=wy7+4 If wy7 > 480 wy7=Rand(-333,-50); wx7=Rand(0,640)punkte=punkte+1 EndIf If ImagesCollide (surfer,sx,sy,0,sw,wx7,wy7,0) leben=leben-1 EndIf DrawImage sw,wx7,wy7 ;WELLE8 wy8=wy8+4 If wy8> 480 wy8=Rand(-264,-50) wx8=Rand(0,640) punkte=punkte+1 EndIf If ImagesCollide (surfer,sx,sy,0,sw,wx8,wy8,0) leben=leben-1 EndIf DrawImage sw,wx8,wy8 Flip Until KeyHit(1) Or leben<1 ;*********************** ENDE DER HAUPTSCHLEIFE ********************* Cls Print " GAME OVER" Print " Du hast " + punkte + " Punkte erreicht!!!" Repeat WaitKey Until KeyHit(1) Flip End |
||
AMD 3200+ 64bit / 512mb DDR / Radeon 9600XT / 5.1 Sound |
![]() |
Merced |
![]() Antworten mit Zitat ![]() |
---|---|---|
*argl* Schon mal was von Arrays (Dim) gehört? Verwendung siehe umgebaute Fassung von Deinem Code:
Code: [AUSKLAPPEN] Graphics 640,480 AppTitle "Surfer 1.2" HidePointer ;LADEN backdrop=LoadImage("gfx\wasser.png") surfern=LoadImage("gfx\surfer.bmp") surferl=LoadImage("gfx\surferl.png") surferr=LoadImage("gfx\surferr.png") surferu=LoadImage("gfx\surferu.png") surferlo=LoadImage("gfx\surferlo.png") surferlu=LoadImage("gfx\surferlu.png") surferro=LoadImage("gfx\surferro.png") surferru=LoadImage("gfx\surferru.png") sw=LoadImage ("gfx\wtest.png"); das bild von der welle ti1=LoadImage("gfx\title1.png") ti2=LoadImage("gfx\title2.png") ;VARYS Dim wx(8) Dim wy(8) Dim wcol(8) SeedRnd MilliSecs() sx=310 sy=400 scroll_y=1 ; wx=320 ; wy=100 speedsurfer=4 punkte=0 leben=3 ;DER VORSPANN DrawImage ti1,0,0 WaitKey DrawImage ti2,0,0 WaitKey .hier ;BUFFER SetBuffer BackBuffer() ;*********************************************************** ;************** DIE HAUPTSCHLEIFE ************************** ;*********************************************************** Repeat Cls ;HINTERGRUND TileBlock backdrop,0,scroll_y scroll_y=scroll_y+1 If scroll_y=ImageHeight(backdrop) Then scroll_y=2 ;************************* ;******** SURFER ********* ;************************* surfer=surfern ;BEWEGUNG DES SURFERS If KeyDown(200) Then sy=sy-speedsurfer If KeyDown(208) sy=sy+speedsurfer surfer=surferu EndIf If KeyDown(203) sx=sx-speedsurfer surfer=surferl EndIf If KeyDown(205) sx=sx+speedsurfer surfer=surferr EndIf If KeyDown(200) And KeyDown(203) surfer=surferlo EndIf If KeyDown(200) And KeyDown(205) surfer=surferro EndIf If KeyDown(208) And KeyDown(203) surfer=surferlu EndIf If KeyDown(208) And KeyDown(205) surfer=surferru EndIf ;RAND If sx<0 Then sx=0 If sx>608 Then sx=608 If sy<0 Then sy=0 If sy>448 Then sy=448 ;BOOSTER If KeyDown(29) speedsurfer=6 Else speedsurfer=4 EndIf DrawImage surfer,sx,sy ;***WELLEN******* For z = 1 To 8 wy(z) = wy(z)+4 If wy(z) > 480 Select z Case 1 : wy(z) = -50 Case 2 : wy(z) = Rand(-84, -50) Case 3 : wy(z) = Rand(-152, -50) Case 4 : wy(z) = Rand(-152, -50) Case 5 : wy(z) = Rand(-152, -50) Case 6 : wy(z) = Rand(-230, 50) Case 7 : wy(z) = Rand(-333, -50) Case 8 : wy(z) = Rand(-264,-50) End Select wx(z) = Rand(0,640) punkte = punkte + 1 wcol(z) = 0 EndIf If ImagesCollide(surfer,sx,sy,0,sw,wx(z),wy(z),0) If wcol(z) = 0 leben=leben-1 wcol(z) = 1 EndIf EndIf DrawImage sw,wx(z),wy(z) Next Flip Until KeyHit(1) Or leben<-100 ;*********************** ENDE DER HAUPTSCHLEIFE ********************* Cls Print " GAME OVER" Print " Du hast " + punkte + " Punkte erreicht!!!" Repeat WaitKey Until KeyHit(1) Flip End Habs aber nicht getestet hab ja Deine Bilder nicht ![]() |
||
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu |
FleX |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi Merced
Vielen dank für deine hilfe!!!! ![]() Endlich funktioniert das bei mir *freu* |
||
AMD 3200+ 64bit / 512mb DDR / Radeon 9600XT / 5.1 Sound |
![]() |
Merced |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte schön.
Du kannst mir Dein Spiel ja mal mailen wenn Du willst, den e-Mail Knopf hast ja an meinen Beiträgen. Oder besuch mal meine Projektseite: Starship Battles Grüße |
||
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group