Problem mit der collisaion zwischen enemy und playerbullet

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Newbi

Betreff: Problem mit der collisaion zwischen enemy und playerbullet

BeitragMo, Okt 08, 2007 11:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich habe folgendes problem:
wenn ich die linke maustaste drücke schiest der spieler und feuert einen schuss ab, wenn der schuss auf einen gegner trifft soll dieser explodieren und vom bildschirm verschwinden ( was soweit auch funktioniert ) nur komischerweise fangen ab dem ersten schuss nach und nach immer mehr gegner an einfach so vonn alleine zu explodieren und vom bildschirm zu verschwinden obwohl ich weder einen schuss abgefeuert hab noch ihn mit nem schuss getroffen hab. je mehr gegner ich abgeschossen hab desto mehr gegner fangen nach ner zeit an wie von selbst zu explodieren.
Und ich find einfach die uhrsache nicht Sad .

Ich hab mal mein ganzen code vom spiel gepostet weil ich überhaupt keine ahnung hab woran das im code liegt.

Wäre sehr nett wenn mir da vielleicht jemand helfen könnte, bin schon am verzweifeln Sad

Vielen Dank im Vorraus

MfG
Newbi

Edit :
---------------

Jetzt weiß ich woran es liegt:
Und zwar erstellt er beim Mausklick -> playerbullet,
mein fehler ist ich dachte wenn ich es ab den x coordinaten 900 nichtmehr einzeichne ist playerbullet auch net mehr da, eingezeichnet wird es zwar nichtmehr aber noch auf collisionen überprüft auf x 900 und y variert.
Wie lösche ich dieses objekt (playerbullet) dann komplett damit die coordinaten dann nichtmehr auf eine collision mit enemy überprüft werden?

ps: ich denke mal das es daran liegt

MfG Newbi

___________________________________

Code: [AUSKLAPPEN]

Graphics 1024,768,32,1
SetBuffer BackBuffer()

AppTitle "Reevs Revenge"


Global G_start_b      =      LoadImage(".\graphic\buttons\startb.bmp")
Global G_start_bc      =      LoadImage(".\graphic\buttons\startbc.bmp")
Global G_ende_b         =      LoadImage(".\graphic\buttons\beendenb.bmp")
Global G_ende_bc      =      LoadImage(".\graphic\buttons\beendenbc.bmp")
Global G_cred_b       =      LoadImage(".\graphic\buttons\creditsb.bmp")
Global G_cred_bc      =      LoadImage(".\graphic\buttons\creditsbc.bmp")
Global G_intro          =      LoadImage(".\graphic\intro\intro.bmp")
Global G_player          =      LoadAnimImage(".\graphic\player\player.bmp",72,19,0,43)
Global G_introreev      =      LoadImage(".\graphic\player\introreev.bmp")
Global G_bgi         =      LoadImage(".\graphic\intro\bgi.jpg")
Global G_reevsrevenge   =      LoadImage(".\graphic\intro\reevsrevenge.bmp")
Global G_mauss         =      LoadImage(".\graphic\maus-.jpg")
Global G_mausl         =      LoadImage(".\graphic\mausl.jpg")
Global G_explo1         =      LoadAnimImage(".\graphic\explo\explo1.bmp",128,128,0,20)

Global G_lvl_1         =      LoadImage(".\graphic\lvl\lvl1.jpg")
Global G_planet_lvl_1   =      LoadImage(".\graphic\lvl\planetlvl1.bmp")
Global G_enemy01_image   =      LoadImage(".\graphic\enemy\enemy01.bmp")
Global G_player_shot   =      LoadAnimImage(".\graphic\explo\playershot.bmp",14,14,0,3)
Global G_sound_player_shot   =   LoadSound(".\sound\sound\laser_shot.wav")
Global G_sound_enemy_explo   =   LoadSound(".\sound\sound\explosion.wav")

Global G_music_bgs      =      LoadSound(".\sound\music\bgs.mp3")
Global G_sound_destroy1 =      LoadSound(".\sound\sound\lvl1_destroyallenemys.mp3")
Global G_music_lvl1      =      LoadSound(".\sound\music\lvl1.mp3")

Global G_chn_bgs      =      PlaySound(G_music_bgs)   


Global G_player_x      
Global G_player_y      



Dim X(200), Y(200), V(200)
For i=0 To 200
   X(i)=Rand(0,1023)
   Y(i)=Rand(0,767)
   V(i)=Rand(-1,-10)
Next


Dim enemyX(800), enemyY(800), enemyV(800) ;erstellung der "Enemys"
For e=0 To 800
   enemyX(e)=Rand(1100,50000)
   enemyY(e)=Rand(20,750)
   enemyV(e)=Rand(-5,-7)
Next





Type playerbullet     ;Der schuss des spielers

Field image
Field x
Field y
Field draw

End Type

p.playerbullet = New playerbullet
p\image       = G_player_shot
p\x            = G_player_x + 10
p\y            = G_player_y
p\draw         = 1







;______________________________
While Not KeyHit(1) Or ende = 1
;______________________________

DrawImage G_intro,345,230

Flip

zahler = zahler +1

   If zahler = 350
      ende = 1
   EndIf
;___   
Wend
;___


menu()













;________________________________________________

Function menu()

;________________________________________________

MoveMouse 600,600


;_________________
While Not ende = 1
;_________________






maus_hit1 = MouseHit(1)
maus_hit2 = MouseHit(2)




Cls




If ChannelPlaying (G_chn_bgs) = 0
   G_chn_bgs   =   PlaySound(G_music_bgs)
EndIf
 




DrawImage G_bgi,0,0
DrawImage G_reevsrevenge,320,200
DrawImage G_start_b,200,350
DrawImage G_cred_b,200,400
DrawImage G_ende_b,200,450



DrawImage G_mauss,MouseX()-1024,MouseY()
DrawImage G_mausl,MouseX(),MouseY()-1024







If RectsOverlap(MouseX(),MouseY(),1,1,200,350,ImageWidth(G_start_b),ImageHeight(G_start_b))
   
   DrawImage G_start_bc,200,350
   DrawImage G_mauss,MouseX()-1024,MouseY()
   DrawImage G_mausl,MouseX(),MouseY()-1024
   
   If maus_hit1
   Cls
   StopChannel G_chn_bgs
      lvl1()
   EndIf
   
   
EndIf






If RectsOverlap(MouseX(),MouseY(),1,1,200,400,ImageWidth(G_cred_b),ImageHeight(G_cred_b))

   DrawImage G_cred_bc,200,400
   DrawImage G_mauss,MouseX()-1024,MouseY()
   DrawImage G_mausl,MouseX(),MouseY()-1024
EndIf






If RectsOverlap(MouseX(),MouseY(),1,1,200,450,ImageWidth(G_ende_b),ImageHeight(G_ende_b))

   DrawImage G_ende_bc,200,450
   DrawImage G_mauss,MouseX()-1024,MouseY()
   DrawImage G_mausl,MouseX(),MouseY()-1024
   
   If maus_hit1
      ende = 1
   EndIf
EndIf






Flip
;___
Wend
;___




;___________

End Function

;___________

















;_________________________________________________

Function lvl1()

;_________________________________________________


Delay 2000

MoveMouse 200,300

chn_sound_destroy1 = PlaySound(G_sound_destroy1)

enemyzahler = 0
playerbulletmenge = 0


;__________________
While Not KeyHit(1)
;__________________





G_player_x      =      MouseX()
G_player_y      =      MouseY()

maus_hit1 = MouseHit(1)
maus_hit2 = MouseHit(2)



SeedRnd = MilliSecs()

Cls




If ChannelPlaying(chn_music_lvl1) = 0 And ChannelPlaying(chn_sound_destroy1) = 0
   chn_music_lvl1 = PlaySound(G_music_lvl1)
EndIf

DrawImage G_planet_lvl_1,200,200

   If MilliSecs() > tmrufo + 20 Then
      tmrufo=MilliSecs()
      frmufo=(frmufo + 1) Mod 43
   End If

   If MilliSecs() > tmrplayershot + 20 Then
      tmrplayershot=MilliSecs()
      frmplayershot=(frmplayershot + 1) Mod 3
   End If

   If MilliSecs() > tmrexplo1 + 100 Then
      tmrexplo1=MilliSecs()
      frmexplo1=(frmexplo1 + 1) Mod 20
   End If


   For i=0 To 200
      x(i)=x(i)+V(i)
      If x(i)<0 Then x(i)=1023: V(i)=Rand(-1,-10)
      Plot X(i),Y(i)
   Next


   For e=0 To 800
      enemyX(e)=enemyX(e)+enemyV(e)
   If enemyx(e) < -50 = 0
      DrawImage G_enemy01_image, enemyX(e),enemyY(e)   
   EndIf

Next




If maus_hit1               ;Playerbullet wird erstellt
      If playerbulletmenge < 20
         playerbulletmenge = playerbulletmenge + 1
         p.playerbullet = New playerbullet
         p\image       = G_player_shot
         p\x            = G_player_x + 15
         p\y            = G_player_y
         p\draw         = 1
         chn_sound_player_shot = PlaySound(G_sound_player_shot)
      EndIf
EndIf






   For b=0 To 1         ;playerbullet wird gezeichnet

   For   p.playerbullet = Each playerbullet
   
   If p\x < 900
      If p\draw = 1
         DrawImage p\image,p\x,p\y,frmplayershot
         p\x = p\x + 7
      EndIf
   EndIf

   If p\x = 900
      playerbulletmenge = playerbulletmenge - 1
   EndIf
   Next
      
   Next
   
   

For p.playerbullet = Each playerbullet       ;Kollisions abfrage zwischen Playerbullet und Enemy
 For e = 0 To 800
   If RectsOverlap(p\x,p\y,12,12, enemyX(e),enemyY(e),66,20) And p\draw = 1
      chn_sound_explo = PlaySound(G_sound_enemy_explo)
      DrawImage G_explo1,enemyX(e),enemyY(e),frmexplo1
      enemyX(e) = -49
      p\draw = 0
   EndIf
  Next
Next
      
      



DrawImage G_player,G_player_x,G_player_y,frmufo


Flip


;___
Wend
;___




;___________

End Function

;___________

Markus2

BeitragMo, Okt 08, 2007 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meine so
Code: [AUSKLAPPEN]

For p.playerbullet = Each playerbullet   
 if p\draw = 0 then delete p
Next
 

Newbi

BeitragMo, Okt 08, 2007 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine antwort.

Also ich habe den code gändert, nur explodieren die immernoch Oo ?


Edit :

Ah nein mein fehler es klappt. Vielen dank.

Aber eine frage noch, wie mache ich das selbe nur mit den enemys?
Also will es löschen sobald es mit playerbullet eine collision hat. Nur is
enemy kein type sondern wird erstellt mit einem dim array.
Wie greife ich auf ein bestimmtes dimfeld zu und lösche diesen komplett?

Code: [AUSKLAPPEN]

   For b=0 To 1

   For   p.playerbullet = Each playerbullet
   
   If p\x < 900
      If p\draw = 1
         DrawImage p\image,p\x,p\y,frmplayershot
         p\x = p\x + 7
      EndIf
   EndIf

   If p\x > 900
      playerbulletmenge = playerbulletmenge - 1
      Delete p.playerbullet               ;<-----
   EndIf
   Next
      
   Next

Markus2

BeitragMo, Okt 08, 2007 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach für die Spieler auch ne Struktur
die hat z.B. die Eigenschaften
PositionX
PositionY
PositionZ
Energie
Tot
Einheit
Farbe
Punkte

wenn du ne Kugel erstellst merke dir noch
in dieser Struktur von welchem Spieler der Schuss kam
dann kannste direkt dem Spiele z.B. Punkte geben oder
bestrafen wenn er was falsches getroffen hat .

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group