Seite 1 von 1

Übereinanderliegende Gegner werden durch 1 Schuss entfernt

Verfasst: 05.09.2014 00:47
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

Re: Übereinanderliegende Gegner werden durch 1 Schuss entfer

Verfasst: 05.09.2014 00:55
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

Re: Übereinanderliegende Gegner werden durch 1 Schuss entfer

Verfasst: 05.09.2014 01:28
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...

Re: Übereinanderliegende Gegner werden durch 1 Schuss entfer

Verfasst: 05.09.2014 07:38
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