[JAVA] Slick2d Framework

12/18/2014 00:05 xEncounter#1
Wie oben beschrieben, hätte ich ein paar fragen zu dem slick2d framework.

Ich suche eine Möglichkeit Kollusion zu detecten.

Folgendes Beispiel:

Man schießt auf einen Gegner und dieser verschwindet.

________________________________


In Java konnte ich dies nicht ganz umsetzen. Die Schüsse und Monster sind in der dynamischen Datenstruktur Arraylist verbaut und müsste irgendwie mit einer komplexen doppelschleife jeweils checken ob genau dieser schuss, dieses Monster trifft.


Jemand schon was ähnliches gemacht oder hat Hilfe parat ?


Zum Verständnis poste ich auch teile meines Codes


Gruß
12/18/2014 11:42 XxharCs#2
StackOverflow & Google sind deine Freunde:
[Only registered and activated users can see links. Click Here To Register...]
12/19/2014 02:57 xEncounter#3
Das hat mein Problem nicht gelöst.

Wie man Collusion detected ist mir klar, bloß nicht wie in meinem Fall oben geschrieben(Da ist es komplexer).

Auf die Idee zu googlen und Co. bin ich schon längst gekommen, hab aber nicht brauchbares oder verständliches gefunden.
12/21/2014 00:04 Hupfi10#4
Poste doch den Code, mit dem du es Versucht hast, bitte.
12/21/2014 19:50 xEncounter#5
Hiermit fange ich den Schuss ab wenn er aus dem Bildschirm läuft.

Code:
		if (!(this.schuss_anzahl.isEmpty())) {

				for (int i = 0; i < this.schuss_anzahl.size(); i++) {
					if (!(this.schuss_anzahl.get(i).y_Pos < 0)) {
						this.schuss_anzahl.get(i).laufen(5);
					} else if (schuss_anzahl.get(0).y_Pos <= 0
							|| schuss_anzahl.get(0).x_Pos <= 0) {
						schuss_anzahl.remove(0);
					}

				}

			}
Theoretisch checke ich hier ob ein Objekt aus schuss_anzahl, ein Objekt aus monster_anzahl trifft.

Code:
		if(schuss_anzahl.get(0).getHitbox().intersects(monster_anzahl.get(0).getHitbox())){
						this.monster_anzahl.remove(0);
						this.schuss_anzahl.remove(0);
					}
Der Index von den beiden Listen, muss ja dynamisch bleiben anstatt 0.

Sobald ich irgendwas mit einer schleife versuche gibs ne Nullpointer exception.
12/22/2014 19:55 Hupfi10#6
Das Framework an sich kenne ich nicht, aber es muss doch sicherlich etwas in Richtung Events geben, die sich Anmelden können und es muss ja für deinen Collider ein Event in Richtung on Hit geben. Optional könnten die Schüsse auch Objekte sein, die relativ zu einem 2D Vektor (ich nehme mal an es ist ein 2D Game) generiert werden, eine art Velocity in Forward bekommen und wenn diese dann einen Collider berühren, welcher eine Instanz des Objekts "Monster" ist, dann zerstören sie sich selbst. Der Ansatz technisch möglich mit deinem Framework?
12/22/2014 20:41 xEncounter#7
Den Ansatz mit dem 2D Vektor habe ich auch überlegt.

Nur leider habe ich keine Ahnung davon ^^.

Gibt es Irgendwo Infos dazu oder eine Kurzerklärung ?
12/22/2014 22:11 Hupfi10#8
Naja ein 2D Vektor ist leicht erklärt :)

Du hast eine Floating Point Variable die die X-Richtung zwischen -1 (links) 0 (nichts) und 1 (rechts) beschreibt und nochmal eine für Z mit -1 (rückwärts) 0 (nichts) und 1 (vorwärts).
Der Input wird dann mit einer Lerp Funktion langsam an die grenzen Angepasst, dass nicht sofort die volle Geschwindigkeit da ist.
Im Anschluss musst du nur noch einen Vektor daraus machen idR nimmt der Konstruktor direkt die zwei Floating Point Variablen und da es ja ein 2D Framework ist wird es wahrscheinlich keine Y Achse geben. Falls doch einfach auf 0f setzten.

Dann aktualisierst du jedes Phys-Frame die Position des Schuss mit oben genanntem Ansatz
12/23/2014 18:16 xEncounter#9
Geht es mit der Z Achse nicht in die 3D Programmierung ?

Was genau ist eine Lerp Funktion ? Ich habe eine X und Y Achse.
12/23/2014 18:59 Hupfi10#10
Lerp sollte in Mathf dabei sein.
Der Funktion gibt man den aktuellen Wert und den Ziel-Wert. Der aktuelle Wert wird dann über einen bestimmten Faktor pro (Zeit-)Einheit erhöht.
Ein UseCase hiervon wäre z.B. ein Motor. Drückt man auf W für Gas und die maximale Geschwindigkeit die der Motor erreichen kann ist 300KM/H dann wäre es ja unrealistisch wenn man kurz W antippt und man sofort 300 fährt. Die Lerp Funktion kann auch mit Logarithmen arbeiten um noch realistischere Kurven ins Spiel zu bringen.
12/23/2014 20:47 Hupfi10#11
Hey,


ich habe dir das ganze mal kurz mal zusamen gebastelt :)
Fertige .exe findest du im CollisionExample.zip und die Scripts in der Scripts.zip :)

VT: [Only registered and activated users can see links. Click Here To Register...]

OT: Die Datei mit dem exakt gleichen Hash gab es schonmal auf VT :confused: :eek: