2016-07-12 8 views
0

Also was ich versuche zu erreichen, ist ein Sprite zu einem anderen Sprite in einer 2D-Umgebung zu bewegen. Ich begann mit dem grundlegenden Mx = Axe - Bx Deal. Aber ich merke, je näher das Ziel dem Sprite kommt, desto langsamer wird es. Also habe ich versucht, einen prozentualen Anteil basierend auf der Geschwindigkeit zu erstellen, dann erhalten x und y ihren prozentualen Anteil an einer Geschwindigkeitsbegrenzung, allerdings wirkt es sehr seltsam und funktioniert nur, wenn Mx und My positiv sind. Hier ist der Code-Auszug:Berechnung der Geschwindigkeit mit konstanter Geschwindigkeit in grundlegenden C++ - Engine

ballX = ball->GetX(); 
    ballY = ball->GetY(); 
    targX = target->GetX(); 
    targY = target->GetY(); 
    ballVx = (targX - ballX); 
    ballVy = (targY - ballY); 
    percentComp = (100/(ballVx + ballVy)); 
    ballVx = (ballVx * percentComp)/10000; 
    ballVy = (ballVy * percentComp)/10000; 

EDIT: der/10000 ist die Sprites Bewegung

+0

Sie Satz des Pythagoras verwenden könnte die Länge der ballV auf eine bestimmte Anzahl einzustellen. –

+0

"Ich habe mit dem grundlegenden * Mx = Ax - Bx * Deal angefangen. Aber ich habe festgestellt, dass je näher das Ziel dem Sprite kommt, desto langsamer wird es." Klingt wie etwas war falsch mit Ihren Eingaben oder Ausgaben an erster Stelle Sie müssen debuggen, dass nicht die Formel anpassen, um Ihren Fehler zu berücksichtigen. Sie sollten den Vektor zum zweiten Punkt finden und diesen Vektor um die Deltazeit skalieren, um die neue Position zu finden. –

Antwort

1

Angenommen, Sie das Sprite mit einer konstanten Geschwindigkeit bewegen wollen zu verlangsamen, Sie sowohl auf der X- und Y-Position eine lineare verblassen zu tun, wie folgt aus:

#include <stdio.h> 

int main(int, char **) 
{ 
    float startX = 10.0f, startY = 20.0f; 
    float endX = 35.0f, endY = -2.5f; 
    int numSteps = 20; 

    for (int i=0; i<numSteps; i++) 
    { 
     float percentDone = ((float)i)/(numSteps-1); 
     float curX = (startX*(1.0f-percentDone)) + (endX*percentDone); 
     float curY = (startY*(1.0f-percentDone)) + (endY*percentDone); 

     printf("Step %i: percentDone=%f curX=%f curY=%f\n", i, percentDone, curX, curY); 
    } 
    return 0; 
} 
0

Vielen Dank für die Respo NSEs, ich habe es funktioniert jetzt aber die Vektoren anstelle des gesamten Prozent, was die Normalisierung, hier ist was ich jetzt habe:

ballX = ball->GetX(); 
    ballY = ball->GetY(); 
    targX = target->GetX(); 
    targY = target->GetY(); 
    ballVx = (targX - ballX); 
    ballVy = (targY - ballY); 
    vectLength = sqrt((ballVx*ballVx) + (ballVy*ballVy)); 
    ballVx = (ballVx/vectLength)/10; 
    ballVy = (ballVy/vectLength)/10; 
+0

Achten Sie auf die Teilung durch Null, wenn der Ball am Ziel ist (falls Sie das noch nicht überprüft haben) – Blindman67

Verwandte Themen