Круговое движение и вектор скорости. Движение на вращающемся винте

Я делаю мини-игру, в которой игрок может прыгнуть на вращающийся винт. У меня есть две возможные ошибки, которые я не могу отследить. Когда нет пропеллера, движение просто выполняется путем регулировки вектора скорости игрока и добавления его к изменению вектора положения

velocityVector.x += moveSpeed;
x += velocityVector.x; 

Когда на пропеллер игрок должен двигаться круговыми движениями.

Я делаю это с помощью float radius = vectorBetweenPlayerandPropeller.len();

if (propeller.getRotation() != 0)
{
    velocityVector.x = (float) (propeller.anchorPoint.x + radius * Math.cos(Math.toRadians(propeller.getTotalRotation() ))) - positionVector.x;
    velocityVector.y = (float) (propeller.anchorPoint.y   + radius * Math.sin(Math.toRadians(propeller.getTotalRotation() ))) - positionVector.y;
}
else
{
    velocityVector.x = 0;
    velocityVector.y = 0;
}       

Проблема 1: Когда я приземляюсь на вращающийся пропеллер (не вращающийся работает нормально), я мгновенно перемещаюсь к дальнему концу пропеллера. Должно быть что-то не так с тем, как я вычисляю скорость. Возможно, я не могу найти скорость, вычисляя новое значение x в соответствии с круговым движением, а затем снимая текущую позицию (positionVector.x). Также, может быть,

Math.toRadians(propeller.getTotalRotation() )

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

Math.toRadians(360 - propeller.getTotalRotation() )

Однако, когда я делаю это, игрок больше не следует за вращающимся винтом.

Проблема 2: Игрок также должен иметь возможность перемещаться вверх и вниз по вращающемуся винту. Я делаю это немного грязным кодом:

//360-rotation due to clockwise/counter-clockwise difference between radians and degrees. 
double adjustedRotationRad = Math.toRadians(360-propeller.getTotalRotation());

if(left) {
    //How is the propeller incline? Should the velocityVector.y be positive? (first case, hence we move downwards since position 0,0 is top left)
    // or should we move upwards? (negative velocityVector.y)
    velocityVector.x -= moveSpeed*Math.abs(Math.cos(adjustedRotationRad));
    if (((90 > (propeller.getTotalRotation()) && (propeller.getTotalRotation()) > 0)) ||
    ((360 > (propeller.getTotalRotation()) && (propeller.getTotalRotation()) > 270)))
    velocityVector.y += moveSpeed*Math.sin(adjustedRotationRad);

    else if ((270 > (propeller.getTotalRotation()) && (propeller.getTotalRotation()) > 90))
    velocityVector.y -= moveSpeed*Math.sin(adjustedRotationRad);
}

Ошибка немного странная: при движении по пропеллеру я не могу пройти середину пропеллера, игрок просто застрял.

0 ответов

Другие вопросы по тегам