Обратное круговое движение - PullRequest
0 голосов
/ 28 ноября 2010

У меня есть запрос, связанный с обратным круговым движением. У меня есть код ниже. Случай 1 - это круговое движение по часовой стрелке, а случай 2 - против часовой стрелки. Переключение между вариантами 1 и 2 выполняется одним касанием пользователя. Когда он переключается с часовой стрелки на против часовой стрелки, он использует одно и то же значение в sin() и cos(), которое равно timer/1.5. Это заставляет движение против часовой стрелки начинать с другой позиции на моей планете. Я хочу вычислить значение, необходимое для моего таймера, чтобы движение против часовой стрелки начиналось с того места, где оно было остановлено во время движения по часовой стрелке, и, таким образом, иметь плавный переход. Кто-нибудь знает правильную математику для этого, так как мой ум застрял?

Просто небольшое объяснение кода ниже. Я вычисляю положение своего робота, беря координаты x и y Планеты, на которой он находится, и выполняю круговое движение с радиусом радиуса Планеты + 55 (это удобная высота для моего спрайта).

        case 1:

        positionX = AttachedPlanet.positionX + sin(timer/1.5)*(AttachedPlanet.planetRadius + 55);
        positionY = AttachedPlanet.positionY + cos(timer/1.5)*(AttachedPlanet.planetRadius + 55);
        timer = timer + 0.02;

        break;
    case 2:



        positionX = AttachedPlanet.positionX + cos(timer/1.5)*(AttachedPlanet.planetRadius + 55);
        positionY = AttachedPlanet.positionY + sin(timer/1.5)*(AttachedPlanet.planetRadius + 55);
        timer = timer + 0.02;

Ответы [ 2 ]

5 голосов
/ 28 ноября 2010

Почему бы просто не оставить ту же функцию и переключиться на уменьшение таймера?Если вам нужна какая-то мера общего времени, используйте второй таймер, который всегда увеличивается.

2 голосов
/ 28 ноября 2010

Чтобы изменить направление, вам нужно вычесть результаты sin / cos. Так что-то вроде

dir = +1; //initialization

if (switchDirection) //event handling
    dir *= -1;

//calculation
positionX = AttachedPlanet.positionX + dir*cos(timer/1.5)*(AttachedPlanet.planetRadius + 55);
positionY = AttachedPlanet.positionY + dir*sin(timer/1.5)*(AttachedPlanet.planetRadius + 55);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...