gegner verschwindet nicht wenn er getroffen wurde

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

hitokiri

Betreff: gegner verschwindet nicht wenn er getroffen wurde

BeitragMo, Apr 04, 2005 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 04, 2005 0:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

hitokiri

BeitragMo, Apr 04, 2005 0:46
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, ich bin ja bescheuert, musste natürliche delete b und delete a heissen. Evil or Very Mad
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 Crying or Very sad

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 Crying or Very sad



problem gelöst, thread kann geschlossen werden

DivineDominion

BeitragMo, Apr 04, 2005 7:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Gewöhn dir das "If-Schleife" gar nciht erst an, es ist nämlich ein "If-Statement" da Bedingung Smile

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

BeitragMo, Apr 04, 2005 8:45
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, hatte ja schon eine lösung dafür gefunden Wink
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

BeitragMo, Apr 04, 2005 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
sry, falscher thread -_-

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group