Problem mit Kollision
Übersicht
BlitzBasic
Allgemein|
|
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
BlitzBasic
Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group

