我想要实现的是在2D环境中将一个精灵移动到另一个精灵。我从基本的Mx = Ax-Bx交易开始。但是我注意到,精灵越接近目标,它放慢的速度就越大。因此,我尝试根据速度创建一个百分比/比率,然后每个x和y都获得其速度允许的百分比,但是,它的行为非常奇怪,并且只有在Mx和My为正时才起作用
这是代码摘录:
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用于减慢精灵运动
最佳答案
假设您希望精灵以恒定速度移动,则可以在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;
}