Schuss-Type löschen funktioniert nicht

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Orbit

Betreff: Schuss-Type löschen funktioniert nicht

BeitragDi, Jun 27, 2006 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
wenn ich in einer for-schleife den Schuss lösche, der auf einen Gegner trifft, bekomme ich eine Fehlermeldung ("Object does not exist").

For s.schuss = Each schuss
For Geg.Gegner = Each Gegner
If ImagesCollide(SchussImg,s\Xpos,s\Ypos,0,GegImage,Geg\Xpos,Geg\Ypos,0) Then
Geg\health = Geg\health - 2
Delete s
If Geg\health = 0 Then
DrawImage Explosion,Geg\xpos-25,Geg\ypos-25
Delete Geg
Punkte = Punkte + 20
EndIf
EndIf
Next
Next

fg
Orbit

Hubsi

BeitragDi, Jun 27, 2006 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist ein recht beliebter Fehler Very Happy Der Schuss wird gelöscht, aber die Gegnerschleife läuft trotzdem weiter und versucht denselben (nicht mehr existenten Schuss) mit dem nächsten Gegner zu benutzen. Ein ql:Exit oder eine Hilfsvariable (für den Fall das ein Schuss auch mehrere Gegner treffen kann) wirkt hier Wunder Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Christoph

BeitragDi, Jun 27, 2006 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Müsste man dann aber nicht 2-mal Exit verwendet (2 For Schleifen)?

Hubsi

BeitragDi, Jun 27, 2006 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, da die Schusschleife ja weiterlaufen soll. Nur der gelöschte Schuss soll nicht mehr überprüft werden und durch das Exit verlässt man die Gegnerschleife und die Schusschleife rattert zum nächsten Schuss weiter, welcher dann wieder mit allen Gegnern benutzt wird.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

kreisman

BeitragMi, Jun 28, 2006 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest auch mit der Null prüfung gucken ob der schuss existiert wenn ja dann kannst du ihn löschen:
Code: [AUSKLAPPEN]
If s <> Null then Delete s
 

Dreamora

BeitragMi, Jun 28, 2006 8:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Würde nicht helfen, da Imagecollide und alles austickt.
Deswegen das Exit.
Damit ist das Problem dann auch gelöst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

kreisman

BeitragMi, Jun 28, 2006 9:29
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm is mir gar nicht aufgefallen, aber man kann die Prüfung auch weiter nach vorne setzten

Code: [AUSKLAPPEN]
For s.schuss = Each schuss
For Geg.Gegner = Each Gegner
If s <> Null then 
If ImagesCollide(SchussImg,s\Xpos,s\Ypos,0,GegImage,Geg\Xpos,Geg\Ypos,0) Then
Geg\health = Geg\health - 2
Delete s
End If
If Geg\health = 0 Then
DrawImage Explosion,Geg\xpos-25,Geg\ypos-25
Delete Geg
Punkte = Punkte + 20
EndIf
EndIf
Next
Next

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group