Problem mit der collisaion zwischen enemy und playerbullet
Übersicht

NewbiBetreff: Problem mit der collisaion zwischen enemy und playerbullet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich meine so
Code: [AUSKLAPPEN] For p.playerbullet = Each playerbullet if p\draw = 0 then delete p Next |
||
Newbi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 . |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group