Space Shooter Gegner

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

joshmami

Betreff: Space Shooter Gegner

BeitragDo, März 03, 2011 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Community!
Ich arbeite gerade an einem Space Shooter und habe
mit dem Aufeinandertreffen von Schüssen und Gegnern Probleme:
Wenn bei der Zerstörung eines Gegners noch ein anderer Schuss auf dem Bildschirm ist, kommt "Object does not exist" und ich finde den Fehler nicht!
Meine Types:
BlitzBasic: [AUSKLAPPEN]

Type TypeShot
Field XPosition
Field YPosition
Field Schaden
End Type
Type TypeGegnerTie
Field Leben
Field XPosition
Field YPosition
Field GegnerPunkte
End Type

Mein SchussCode(in der Hauptschleife):
BlitzBasic: [AUSKLAPPEN]

If KeyHit(57)
Schuss.TypeShot = New TypeShot
Schuss.TypeShot\XPosition = XPositionFalke - 4
Schuss.TypeShot\YPosition = YPositionFalke - 100
Schuss\Schaden = SchussStufe
EndIf

Mein Abfrage Code(ob Schuss und Gegner Zusammengetroffen sind):
BlitzBasic: [AUSKLAPPEN]

For Gegner.TypeGegnerTie = Each TypeGegnerTie
If Gegner\YPosition > YPositionFalke - 140 Then
Color 255,0,0
Text 512,384,"Game Over!"
Lose = 1
EndIf
DrawImage GegnerTie,Gegner\XPosition,Gegner\YPosition
Gegner\YPosition = Gegner\YPosition + 1
For Schuss.TypeShot = Each TypeShot
Text 400,400,"Klappt!"
If ImagesCollide(ShotBild,Schuss\XPosition,Schuss\YPosition,0,GegnerTie,Gegner\XPosition,Gegner\YPosition,0) Then
Text 500,600,"Klappt2!"
Gegner\Leben = Gegner\Leben - Schuss\Schaden
If Gegner\Leben = 0 Then
Delete Gegner
EndIf
Delete Schuss
EndIf
Next
Next

Ich habe das Problem schon auf das ImagesCollide() eingegrenzt ,weil nur "Klappt " und nicht "Klappt2" angezeigt wird .
Bin dankbar für jede Hilfe
Mfg Joshmami
 

Jumper

BeitragDo, März 03, 2011 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wird daran liegen, dass Du in Deiner Schleife den Gegner löscht, wenn die Energie 0 ist. Nur läuft die Schleife weiter und prüft eine Kollision mit einem Gegner, der gar nicht mehr da ist, was zu dem Fehler führt.

Versuch mal den Code. Habe ich zwar nicht gestestet, sollte aber so funktionieren:

BlitzBasic: [AUSKLAPPEN]
For Gegner.TypeGegnerTie = Each TypeGegnerTie
If Gegner\YPosition > YPositionFalke - 140 Then
Color 255,0,0
Text 512,384,"Game Over!"
Lose = 1
EndIf
DrawImage GegnerTie,Gegner\XPosition,Gegner\YPosition
Gegner\YPosition = Gegner\YPosition + 1
ClearGegner = 0
For Schuss.TypeShot = Each TypeShot
Text 400,400,"Klappt!"
If ImagesCollide(ShotBild,Schuss\XPosition,Schuss\YPosition,0,GegnerTie,Gegner\XPosition,Gegner\YPosition,0) Then
Text 500,600,"Klappt2!"
Gegner\Leben = Gegner\Leben - Schuss\Schaden
If Gegner\Leben = 0 Then
Delete Gegner
ClearGegner = 1
EndIf
Delete Schuss
If ClearGegner Then Exit
EndIf
Next
Next

Johannes´

BeitragDo, März 03, 2011 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wird wohl daran liegen, dass du, nachdem ein Gegner zerstört wird, ihn löschst, aber dann in der For-Schleife weiter prüfst, ob der schon gelöschte Gegner nochmal getroffen wird. Nach dem Löschen solltest du also direkt zum nächsten Gegner wechseln, benutzte hierfür den Befehl Exit

BlitzBasic: [AUSKLAPPEN]
				Text 500,600,"Klappt2!"
Gegner\Leben = Gegner\Leben - Schuss\Schaden
Delete Schuss
If Gegner\Leben = 0 Then
Delete Gegner
Exit
EndIf
  • Zuletzt bearbeitet von Johannes´ am Do, März 03, 2011 19:58, insgesamt 3-mal bearbeitet

Xeres

Moderator

BeitragDo, März 03, 2011 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Der übliche Fehler - wenn du "Delete Gegner" in der Schuss-For...Each Schleife ausführst, ist Gegner=NULL. Auf ein Null-Objekt kann man aber nicht zugreifen, wie ja der Fehler deutlich macht.
Exit oder zum löschen Markieren wenn es sicher kein Zugriff mehr gibt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

joshmami

BeitragDo, März 03, 2011 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die raschen antworten. Very Happy Very Happy
Mit dem "Exit" hat's funktioniert
Mfg Joshmami
 

Sterbendes Lüftlein

BeitragDo, März 03, 2011 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group