Kollisions-Abfrage

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

FleX

Betreff: Kollisions-Abfrage

BeitragSa, Sep 18, 2004 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
AMD 3200+ 64bit / 512mb DDR / Radeon 9600XT / 5.1 Sound
 

David

BeitragSa, Sep 18, 2004 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 18, 2004 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 18, 2004 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 18, 2004 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
*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 Wink
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu
 

FleX

BeitragSa, Sep 18, 2004 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
hi Merced
Vielen dank für deine hilfe!!!! Smile
Endlich funktioniert das bei mir *freu*
AMD 3200+ 64bit / 512mb DDR / Radeon 9600XT / 5.1 Sound

Merced

BeitragSa, Sep 18, 2004 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group