
Jaiel
Dauer-User
- 235
Hey Community,
es geht um folgendes: Ich habe ein spiel und in diesem muss ich sagen wir mal um es einfacher zu machen ein Ball zu einem bestimmten Punkt in 2D bewegen. Jetzt hat der Ball eine vorgegebene Geschwindigkeit, zum Beispiel 100 px/dpi pro sekunde. Den Punkt soll er in eienr geraden Linie erreichen und dafür muss ich die jeweiligen Geschwindigkeiten in X bzw. Y - Richtung berechnen. Also falls der Ball einfach nach rechts oder links rollen soll ist die Geschwindigkeit in Y richtung ja gleich 0 und Umgekehrt genau dasselbe ich hoffe ihr könnt mir folgen.
So jetzt habe ich mit Hilfe von Pythagoras diesen "Algorithmus" gebastelt:
die Abfrage
also ob der Abstand zwischen den koordinatenstellen des Objektes zu seinem ziel im Quadrat 900 (also 30 px/dpi) mache ich damit das Objekt nciht über das Ziel hinausschießt sondern in einem bestimmten Bereich stehen bleibt. Und ich quadriere das damit ich den Betrag rausbekomme denn posX-tarX kann ja auch negativ sein da wollte ich nciht ne doppelte if anweisung amchen ob posX-tarX< 30 und größer -30) ist.
Der Rest ist simple Mathematik ich bin da aber auch nciht intuitiv drauf gekommen beim ersten Mal: er hat ne geschwindigkeit von wie gesagt 100 pixel/sekunde er hat die Entfernung von seiner position zu der anvisierten
wenn die z.B. 200 pixel wäre dann errechnet er den faktor um den er sich in X/Y richtung bewegen muss um in 2 sekunden bei dieser x stelle zu sein bewegen muss((100px/s)/(200px))=0.5/1s).
So und diesen Faktor rechnet er mal die Differenz der Punkte. Wäre der Abstand also sagen wir mal 150 px zwischen den X stellen dann muss der ball sich eben um 0.5*150 px/sekunde = 75 pixel in x richtung pro sekunde bewegen!
(ich hab mir sowas von an den Kopf gefasst weil ich das auf dem Blatt über sinus tangens und was weiß ich was alles ausgedacht habe)
Naja meine Frage lautet kann man diesen code noch so ändern dass ich nciht auf Math.sqrt(...) zurückgreifen muss?
Ich blicke da grad nciht hinter ob das irgendwie anders geht ....
Der ursprüngliche Beitrag von 19:52 Uhr wurde um 19:55 Uhr ergänzt:
Es sollte aber ein Code werden der nciht noch komplizierter und länger als dieses original werden soll
es geht um folgendes: Ich habe ein spiel und in diesem muss ich sagen wir mal um es einfacher zu machen ein Ball zu einem bestimmten Punkt in 2D bewegen. Jetzt hat der Ball eine vorgegebene Geschwindigkeit, zum Beispiel 100 px/dpi pro sekunde. Den Punkt soll er in eienr geraden Linie erreichen und dafür muss ich die jeweiligen Geschwindigkeiten in X bzw. Y - Richtung berechnen. Also falls der Ball einfach nach rechts oder links rollen soll ist die Geschwindigkeit in Y richtung ja gleich 0 und Umgekehrt genau dasselbe ich hoffe ihr könnt mir folgen.
So jetzt habe ich mit Hilfe von Pythagoras diesen "Algorithmus" gebastelt:
Code:
/**
* Sets the velocity for the Objects movement in x/y- direction.
* tarX/tarY - are the targeting x/y - coordinates
* posX/posY - are the current x/y - positions of the object
* velX/velY - are the velocities in x/y - directions(px/ms)
* vel - the velocity (vector) of the object (px/ms)
* delPos - is the distance between the targeting position and the current position
*/
public void setVelocity()
{
delPos=(float) Math.sqrt((this.tarX-this.posX)*(this.tarX-this.posX)
+(this.tarY-this.posY)*(this.tarY-this.posY));
if ((this.posX-this.tarX)*(this.posX-this.tarX)<=900)this.velX=0;
else if(delPos!=0) this.velX=this.vel*(this.tarX-this.posX)/delPos;
if ((this.posY-this.tarY)*(this.posY-this.tarY)<=900)this.velY=0;
else if(delPos!=0) this.velY=this.vel*(this.tarY-this.posY)/delPos;
}
die Abfrage
Code:
if ((this.posX-this.tarX)*(this.posX-this.tarX)<=900)
Der Rest ist simple Mathematik ich bin da aber auch nciht intuitiv drauf gekommen beim ersten Mal: er hat ne geschwindigkeit von wie gesagt 100 pixel/sekunde er hat die Entfernung von seiner position zu der anvisierten
wenn die z.B. 200 pixel wäre dann errechnet er den faktor um den er sich in X/Y richtung bewegen muss um in 2 sekunden bei dieser x stelle zu sein bewegen muss((100px/s)/(200px))=0.5/1s).
So und diesen Faktor rechnet er mal die Differenz der Punkte. Wäre der Abstand also sagen wir mal 150 px zwischen den X stellen dann muss der ball sich eben um 0.5*150 px/sekunde = 75 pixel in x richtung pro sekunde bewegen!
(ich hab mir sowas von an den Kopf gefasst weil ich das auf dem Blatt über sinus tangens und was weiß ich was alles ausgedacht habe)
Naja meine Frage lautet kann man diesen code noch so ändern dass ich nciht auf Math.sqrt(...) zurückgreifen muss?
Ich blicke da grad nciht hinter ob das irgendwie anders geht ....

Der ursprüngliche Beitrag von 19:52 Uhr wurde um 19:55 Uhr ergänzt:
Es sollte aber ein Code werden der nciht noch komplizierter und länger als dieses original werden soll
Zuletzt bearbeitet: