физика игры — Расчет скорости с использованием постоянной скорости в базовом движке C ++

Поэтому я пытаюсь добиться перехода спрайта к другому спрайту в 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, чтобы замедлить движение спрайтов

0

Решение

Предполагая, что вы хотите, чтобы спрайт двигался с постоянной скоростью, вы можете сделать линейное замирание в обеих позициях 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;
}
1

Другие решения

Спасибо за ответы, я получил это сейчас, но нормализуя векторы вместо целого процента, вот что у меня сейчас:

    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

По вопросам рекламы [email protected]