2015-12-15 3 views
1

Так что я пытаюсь заставить тело моего игрока вращаться, но когда на нижней половине планеты вращение инвертируется, im использует .setTransform() для вращения.Box2D, вращающийся от планеты

if(insideRotation==Math.abs(playerRotation)){ 

     } else if(insideRotation<Math.abs(playerRotation)){ 
      insideRotation+=Math.PI/45; 
     } else if (insideRotation>Math.abs(playerRotation)){ 
      insideRotation-=Math.PI/45; 
} 

Facing the wrong way

Facing the righ way

Линия на блоке показывает, как она сталкивается, я хотел бы нижняя фотография быть обращена в сторону от зеленого круга.

+0

Не могли бы вы приложить какое-либо изображение с объяснением, чего пытаетесь достичь? Кроме того, что внутри переменных Rotation/playerRotation? –

+0

'insideRotation' - переменная, которую я использую для создания плавного автоматического поворота с использованием' insideRotation + or- = Math.PI/45' каждого тика. 'playerRotation' равно' Math.atan2 (chars [0] .getCenterY() - планет [0] .getCenterY(), (chars [0] .getCenterX() - планет [0] .getCenterX())) 'В принципе желаемый угол. –

ответ

0

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

Было бы что-то вроде

Body body, planet; //your 'character' and planet 

    ... 

    Vector2 bodyCenter = body.getWorldCenter(); 
    Vector2 planetCenter = planet.getWorldCenter(); //if you would use getPosition it would be related to the body's origin! 

    Vector2 subVector = bodyCenter.sub(planetCenter); 

    body.setTransform(x, y, subVector.angle()); //it is possible that you will need to make '-angle()' here or something! 

Таким образом, вы будете всегда «фиксируется на планете» вращения независимо от того, какое положение на планете будет иметь тело.

Смежные вопросы