gegner verschwindet nicht wenn er getroffen wurde
Übersicht

hitokiriBetreff: gegner verschwindet nicht wenn er getroffen wurde |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn der Gegener und die Kugel zusammentreffen wird zwar der aliencount verringert und ein neues erschaffen aber das getroffene alien verschwindet nicht. wäre dankbar wenn mir jemand meinen fehler aufzeigt.(das kommentierte war ne idee für ne schneller kollisionsabfrage ist aber noch nicht eingebaut)
Function collisionbulletenemy();collision between bullet enemy ;and bullet leaving screen checked ;bullet width = ?50 ;rock width = ?100 ;rock height = ?100 ;bullet height = ?50 ;flagfirstbullet=0 ;firstali=1 For b.bullet= Each bullet For a.alien = Each alien If b\y > a\y And b\y <= a\y + a\height- b\height Then If b\x > a\x And b\x <= a\x+ a\width - b\width Then Delete New alien Delete New bullet ;If Firstali=1 Then ;If b\x-fighterx <180 Then ;flagfirstbullet=1 ;Else ;EndIf ;Else ;EndIf bulletcount = bulletcount -1 aliencount = aliencount -1 Else EndIf Else EndIf If b\x > 640 Then Delete New bullet bulletcount=bulletcount-1 Else EndIf Next firstali=firstali+1 Next If aliencount = 0 Then ;if aliens destroyed spawn new ones createalien(randomalien) randomalien=Rnd(4,aliennumber) Else EndIf End Function |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habs mir nicht genau angesehen, aber Delete a bzw. Delete b, nicht Delete New bullet. Kann mir nur schwer vorstellen das der Code so überhaupt läuft, aber Blitz hat mich schon des öfteren überrascht ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
hitokiri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke, ich bin ja bescheuert, musste natürliche delete b und delete a heissen. ![]() jetzt hab ich allerdings das problem, dass ich bullets deleten wollte und aliens deleten wollte die über den bildschirmrand rausgehen. bei einer kollision von bullet und alien kackt er jetzt ab und sagt mir in der "if b\x > 640 abfrage dass das objekt nicht existieren würde ![]() das an mal gelöscht sagt er mir nun, in der For b.bullet= Each bullet For a.alien = Each alien If b\y > a\y And b\y <= a\y + a\height- b\height Then <-if schleife, dass das objekt nicht existieren würde ![]() problem gelöst, thread kann geschlossen werden |
||
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gewöhn dir das "If-Schleife" gar nciht erst an, es ist nämlich ein "If-Statement" da Bedingung ![]() Ich glaub das sieht bei dir insg. etwa so aus: Code: [AUSKLAPPEN] For b.bullet for a.alien if überrand delete a endif if kollision delete a delete b endif next next PRobleme gibt es nun zweierlei. Erstmal gehst du ja alle aliens durch, und zwar mehrmals hintereinander, da ja jede Kugel gecheckt werden muss. Diese über-rand-Sache könntest du deswegen auch auslagern, aber da die S_chleife da eh schon steht soll's erstmal so gehen. Das eigentliche Problem ist, dass du im oberen Teil löscht. D.h. das Alien gibts nichtmehr. Bei der Kollisionsabfrage eine Zeile drunter greifst du aber nochmal auf die Variable zu. Die ist aber leer. Lösung: Durch ElseIf immer nur eine Möglichkeit des Verschwindens pro Schleifendurchlauf mitgeben. Logischerweise ist da die Kollision mit einer Kugel wichtiger, daher wäre die Reihenfolge umzudrehen. Oder du schreibst nach dem 'Delete a' bei der Über-Rand-Geschichte ein 'Continue'. Damit hlrst du mit dem aktuellen Schleifendurchlauf auf und machst due Kollisionsüberprüfung für das eh gelöschte Alien nicht mehr mit. |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
hitokiri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke, hatte ja schon eine lösung dafür gefunden ![]() ich hab das nun einfach so gemacht: For a.alien = Each alien For b.bullet= Each bullet If b\y > a\y - b\height And b\y <= a\y + a\height Then If b\x > a\x + b\width + b\width And b\x <= a\x + a\width +b\width Then Delete a Delete b bulletcount = bulletcount -1 aliencount = aliencount -1 Exit Else EndIf Else EndIf Next Next hatte nur das dämliche exit vergessen ;P |
||
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sry, falscher thread -_- | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group