Как заставить тело box2d следовать синусоиде

Я хотел бы, чтобы спрайт следовал по пути кривой sin, используя функцию SetVelocity (x, y). Сначала это показалось мне простым, я сделал функцию, которая возвращает производную функции, по которой я хотел бы путешествовать, то есть для sin (x) функция возвращает косинус этого x. Проблема в том, что я использую время (c ++ time_t) в качестве «х» в этом уравнении. Когда я возвращаю результат из этого уравнения, у меня тогда есть X и Y, и я использую функции триггера для получения отношения, т.е.

    float newY = velocityResults->getVelocityFromLua(x, functionToCall);

float angle = std::atan2(newY,newX);
float velocityX = cos(angle);
float velocityY = sin(angle);
velocityX*=PLAYER_SPEED;
velocityY*=PLAYER_SPEED;
player->getPhysicalProperties()->setVelocity(velocityX,velocityY);

Проблема в том, что время увеличивается все больше и больше, и это, при дальнейшем осмотре, является ужасным способом достижения моей цели, поскольку оно не работает вообще. Время идет и продолжается, и х становится все больше и больше, поэтому он обгоняет все. Я знаю, что есть более простой способ сделать это, но он полностью ускользает от меня.

(Причина, по которой я это делаю: я делаю математическую игру, в которой игрок путешествует по различным функциям для достижения цели)

0

Решение

использование b2MouseJoint и обновить его цель, чтобы быть на вашей кривой

0

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

Других решений пока нет …

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