# Blöcke, Hitboxen, Koolisionsabfrage - Problem



## Jannik 123456 (1. Dez 2013)

Hallo ,
da ich nicht soviel Zeit habe umreiße ich mein Problem kurz :
ich will als Spieler auf und gegen Blöcke springen, sodass ich auf ihnen stehen kann und meine geschwindigkeit auf 0 gesetzt wird, wenn ich dagegen laufe,bzw springe (hitboxen sind schon programmiert) nur weiß ich nicht woher ich erkennen kann aus welcher richtung der spieler auf die box stößt um die passende methode zu benutzen ...
ist wahrscheinlich super simpel aber ich komme nicht drauf 
ich bedanke mich im Vorraus für eure Posts
MFG Jannik


----------



## rme (1. Dez 2013)

Hm. Richtungsvektor vom Mittelpunkt der Box zum Spieler aufstellen und alle Vorzeichen auswerten? x positiv -> "von rechts", y positiv -> "von oben", z positiv -> "von vorn" usw.


----------



## Jannik 123456 (1. Dez 2013)

Hm erstmal vielen Dank für die schnelle antwort, nur weiß ich nicht wie ich einen richtungsvektor aufstellen soll, komme nur auf die direkte entfernung :s


----------



## rme (1. Dez 2013)

(spieler.x - boxMitte.x, spieler.y - boxMitte.y, spieler.z - boxMitte.z)

Und weil dich eigentlich nur die Vorzeichen interessieren, reichen dazu auch ein paar if-Abfragen, falls du den Vektor sonst nicht brauchst


----------



## Jannik 123456 (1. Dez 2013)

Also ich habe es jetzt so versucht, 
	
	
	
	





```
if(((getX()+getWidth()/2) - (o.getX()+o.getWidth()/2))< 0) {
				setDx(0);
				touchingLeft = true;
				setX(o.getX()+o.getWidth()-1);
```

komischer weise reagiert diese abfrage auch wenn der spieler am rechten ende berührt ... 
:bahnhof::bahnhof:


----------



## rme (1. Dez 2013)

Ich kenne dein Koordinatensystem nicht - dass x links und rechts entspricht, war nur eine Vermutung. Es gibt da natürlich diverse andere Betrachtungen.. falls du es nicht hinbekommst, müsstest du dein Koordinatensystem mal genauer erklären und was der obige Code genau bedeutet, also was in dem Fall this und o sind.


----------



## Jannik 123456 (1. Dez 2013)

also x 0 ist links und y 0 ist unten
this ist der spieler und o ist das objekt mit welchem der spieler zusammenstößt :s
angefangen zu zeichnen wird unten links in der ecke des objektes so das die mitte die x koordinate + die breite /2 ist (mitte auf der x ebene)


----------



## jonas.r (1. Dez 2013)

Sehr gute Kollisions-Tutorials:
Kollisionserkennung - YouTube

Liebe Grüße,

Jonas


----------



## Jannik 123456 (2. Dez 2013)

Hmm erstmal danke^^ aber die koolisionsabfrage ansich ist nicht das problem, eher das "vermeiden" von überschneidungen, nur weiß ich nicht, wie das funktionieren soll, eine idee von mir war das bevor der spieler verschoben wird geguckt wird ob der (in diesem beispiel nur) x wert + die geschwindigkeit mit einem objekt zusammenstößt, und wenn ja dass dann die bewegung abgebrochen wird, jedoch hat dies aucht nicht wirklich gut geklappt, im ganzen such ich ja eher nach einer art konvention oder norm, wie man solche probleme löst anstatt nur dieses eine problem von mir zu lösen, das mit den vektoren hat nur (wahrscheinlich wegen meiner dummheit) in maßen funktioniert, da wenn der spieler oben auf dem block steht der x vektor immernoch positiv sein kann, was dazu führen würde, dass man sich nicht mehr bewegen könnte :s


----------

