Übereinanderliegende Gegner werden durch 1 Schuss entfernt

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

Übereinanderliegende Gegner werden durch 1 Schuss entfernt

Beitrag von Delle »

Hallo,

stellt euch ein Ballerspiel vor, wo mehrere Gegner rumfliegen und sich auch gegenseitig überdecken.

Wenn ich nun einen Gegner abschieße und darunter noch ein anderer Gegner war, so wird er ebenfalls mit abgeschossen (die Punkte komischerweise aber nur einmalig gezählt).

Ich wette mal es liegt am MouseButton(1) oder? Da muss sicher noch eine Abfrage rein, ob der Button auch wieder losgelassen wurde oder sowas...

Code: Alles auswählen

ForEach Gegner()
     

     If MouseButton(1) And SpritePixelCollision(#Sprite_Fadenkreuz,MouseX(),MouseY(),#Sprite_Feind,Gegner()\x,Gegner()\y)
          
           DeleteElement(Gegner())
           punkteanzahl=punkteanzahl+100
     
     EndIf

Next
Danke,
Delle
PB 6.02 LTS + Win 11
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Übereinanderliegende Gegner werden durch 1 Schuss entfer

Beitrag von STARGÅTE »

MouseButton(1) liefert immer ein Wert ungleich Null wenn die Maus gedrückt ist.
Das mehrere Gegner gelöscht werden liegt daran, dass du nach der ersten Löschung kein Break hast um die schleife zu verlassen, dadurch werden weiterhin alle weiteren Gegner untersucht.
Das die Punkte nur einmal gezählt werden sollte nicht sein, wenn zwei Gegner gelöscht wurden, dann gabs auch zwei mal das +100 also insgesamt +200
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

Re: Übereinanderliegende Gegner werden durch 1 Schuss entfer

Beitrag von Delle »

STARGÅTE hat geschrieben:Das mehrere Gegner gelöscht werden liegt daran, dass du nach der ersten Löschung kein Break hast um die schleife zu verlassen, dadurch werden weiterhin alle weiteren Gegner untersucht.
Stimmt, ist ja eigentlich logisch das man da nicht weitersuchen muss.

Aber ist der Aufbau nicht sowieso bischen altmodisch? Das ist eine Unterroutine, welche regelmäßig aus der Hauptschleife aufgerufen wird.

Würde doch theoretisch reichen, wenn man in der Hauptschleife die Maus abfrägt und nur bei Bedarf dann die "Kollisionsroutine" aufruft oder?

Noch geiler wäre natürlich sowas wie ein Eventlistener oder sowas...
PB 6.02 LTS + Win 11
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Übereinanderliegende Gegner werden durch 1 Schuss entfer

Beitrag von STARGÅTE »

Klar, Sachen die sich in der Schleife nicht ändern, können auch außerhalb der Schleife liegen:

Code: Alles auswählen

If MouseButton(1)
	
	ForEach Gegner()
		If SpritePixelCollision(#Sprite_Fadenkreuz,MouseX(),MouseY(),#Sprite_Feind,Gegner()\x,Gegner()\y)
			DeleteElement(Gegner())
			punkteanzahl=punkteanzahl+100
			Break
		EndIf
	Next
	
EndIf
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten