2016-07-12 23 views
0

所以我試圖實現的是一個精靈在2D環境中移動到另一個精靈。我從基本的Mx = Ax - Bx交易開始。但我注意到精靈越接近目標,它就越慢。所以我試圖創建一個基於速​​度的百分比/比率,然後每個x和y都獲得它們的速度限制的百分比,但是,它的行爲非常奇怪,似乎只有在Mx和My都是正數時才起作用 以下是代碼段:在基本的C++引擎中使用一致的速度計算速度

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; 

編輯:/ 10000是減緩精靈運動

+0

你可以用勾股定理ballV的長度設置爲特定數字。 –

+0

「我從基本的* Mx = Ax - Bx *交易開始,但我注意到精靈越接近目標,它越慢。」聽起來像是你的輸入或輸出出了問題首先,你需要調試,而不是調整公式來解決你的錯誤。您應該找到第二個點的矢量,然後按照增量時間縮放該矢量以找到新的位置。 –

回答

1

假設你想要的精靈以恆定速度移動,你可以在X和Y位置,這樣既做了線性褪色:

#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

感謝您的回覆國家科學教育標準,我現在的工作,但標準化矢量,而不是整個事情百分比,這是我現在有:

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

當球在目標時注意除以零(如果你還沒有檢查) – Blindman67