Problem mit Kollision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Cireva

Betreff: Problem mit Kollision

BeitragSa, Dez 27, 2008 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Also hab vor kurzem angefangen mein erstes Spiel zu schreiben.
Soll ein einfacher Weltraumshooter werden.
Dabei bekommen ich durch die Kollision folgendes Problem:
"Object does not exist"
Ich versteh nicht genau warum das jetzt kommt !?!
Auf alle Fälle mal hier der Code:
Code: [AUSKLAPPEN]
;Konfiguration
Graphics 640,480,16,2
SetBuffer BackBuffer()
AppTitle "Spaceshooter"
timer = CreateTimer(30)
;Dateien werden geladen
player = LoadImage("grafik/spieler.png")
Gegner = LoadImage("grafik/gegner.png")
hintergrund = LoadImage("grafik/hintergrund.png")
shoot = LoadSound("sound/shoot.wav")
Geschoss = LoadImage("grafik/schuss.png")
;Einstellungen und Variablen
MaskImage player,255,255,255
MaskImage Geschoss,255,255,255
MaskImage Gegner,255,255,255
x = 272
y = 400
Type Geschoss
   Field x
   Field y
End Type
Type Gegner
   Field x
   Field y
End Type

; Mainschleife
Repeat     
Cls
DrawImage hintergrund,0,0
;Gegnerauftauchen durch Zufall
rnd_y = Rnd(0,20)
If    rnd_y = 1 Then
   f.Gegner = New Gegner
   f\x = Rnd(0,560)
   f\y = 0   
EndIf
;Gegner updaten
For f.Gegner = Each Gegner
   f\y = f\y + 3
   DrawImage Gegner,f\x,f\y
   If f\y > 480 Then Delete f
Next

;Bewegung
If KeyDown(203) Then x = x - 3 
If KeyDown(205) Then x = x + 3
If x > 554 Then x = 554
If x < 0 Then x = 0

;Bei Schuss
If KeyHit(57) Then
   
   kanal = PlaySound(shoot)
   g.Geschoss = New Geschoss
   g\x = x + 40
   g\y = y - 5
EndIf
;Schuss zeichnen
For g.Geschoss = Each Geschoss
   g\y = g\y - 5
   DrawImage Geschoss,g\x,g\y
   If g\y < 0 Then Delete g
Next
;Kollisionen prüfen
If ImagesCollide(Gegner,f\x,f\y,0,Geschoss,g\x,g\y,0)
      Delete f
      Delete g
EndIf

DrawImage player,x,y
WaitTimer (timer)
Flip
Until KeyHit(1)


Ich hoff mal jemand kann mir helfen

Xeres

Moderator

BeitragSa, Dez 27, 2008 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Bild Gegner heißt genauso wie ein Type Gegner -> muss zu Verwirrungen führen.
und: "Flip 0"
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)

Cireva

BeitragSa, Dez 27, 2008 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne daran liegts net. Habs grad ausprobiert
und was meinste mit flip 0 ?

Xeres

Moderator

BeitragSa, Dez 27, 2008 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach, hab ich übersehen:
Code: [AUSKLAPPEN]
ImagesCollide(Gegner,f\x,f\y,0,Geschoss,g\x,g\y,0)
Liegt nicht in einer passenden Doppelschleife um jeden Geschoss und Gegener aufeinander zu prüfen.
Wenn eine der Instanzen NULL ist, die du da prüfst - und sie sind Null wenn du noch keine erstellt hast - führt es zu diesem Fehler.

Zu Flip 0 kann ich dieses empfehlen: Hurra, 100 % Auslastung
Kurz gesagt: Flip verbraucht 100% CPU, darum die Vertikale Synchronisation abstellen -> "Flip 0" und einen Timer verwenden um die Framerate niedrig zu halten. Letzteres hast du ja schon.
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)

Cireva

BeitragSa, Dez 27, 2008 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du es so meinst, funktioniert es auch nicht
Code: [AUSKLAPPEN]
For f.Gegner = Each Gegner
   For g.Geschoss = Each Geschoss
   If ImagesCollide(enemy,f\x,f\y,0,Geschoss,g\x,g\y,0)
         Delete f
         Delete g
   EndIf
   Next
Next

Xeres

Moderator

BeitragSa, Dez 27, 2008 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert es nicht wie es soll oder gar nicht? Im Debug Modus Compilieren, da sollte eine Zeile markiert werden...
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)

Cireva

BeitragSa, Dez 27, 2008 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
oh sry grad übersehen dass ich es vorher net gespeichert hatte und den alten code gestartet hab Confused
danke für die hilfe und den nützlichen link Wink

edit: doch was entdeckt
und zwar wenn 2 schüsse gleichzeitigkommen und einer kollidiert kommt derselbe fehler

Xeres

Moderator

BeitragSa, Dez 27, 2008 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du den Gegner f löschst, zählt die innere Schleife Weiter und es kommt zur Prüfung mit dem Null-Objekt.
1) Wenn die Kollision zutrifft, beide schleifen verlassen -> Exit
2) Im Type eine Variable einrichten, die beim Treffer auf True schaltet und dafür sorgt, das die Instanz erst dann mit Delete entfernt wird, wenn auf sie nicht mehr zugegriffen wird.
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)

Cireva

BeitragSa, Dez 27, 2008 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok das Problem is geklärt Vielen Dank

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group