Problem mit Kollision
Übersicht

![]() |
CirevaBetreff: Problem mit Kollision |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Cireva |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ne daran liegts net. Habs grad ausprobiert
und was meinste mit flip 0 ? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Cireva |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Cireva |
![]() Antworten mit Zitat ![]() |
---|---|---|
oh sry grad übersehen dass ich es vorher net gespeichert hatte und den alten code gestartet hab ![]() danke für die hilfe und den nützlichen link ![]() edit: doch was entdeckt und zwar wenn 2 schüsse gleichzeitigkommen und einer kollidiert kommt derselbe fehler |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Cireva |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok das Problem is geklärt Vielen Dank | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group