2013-12-12 4 views
0

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

void CinderGaemApp::CalculateAngleBetweenMouseAndObject() 
{  
    float deltaY = mouseLoc_.y - 10; //hardcoded y coordinate of the tip of the spaceship 
    float deltaX = mouseLoc_.x - 0; //hardcoded x coordinate of the tip of the spaceship 

    angleInDegrees_ = atan2(deltaY,deltaX) * 180/3.141; 
} 

После этого я обновляю объект игрока:

void Player::update(float degree) 
{ 
    gl::pushMatrices(); 
    gl::translate(20,20); 
    gl::rotate(degree); 
    gl::translate(-20,-20); 
    gl::popMatrices(); 
} 

Затем рисую его. Но моя проблема в том, что когда я использую gl::popMatrices(), изображение не перемещается вообще. Если я удаляю gl::popMatrices(), изображение сначала вращается вокруг в течение 2 секунд или около того, а затем не указывает на правильность мыши. Что-то не так с моим кодом? Прокомментируйте, если вам нужно больше кода, я не уверен, сколько информации вам нужно.

ответ

1

вам нужно поставить последовательность в вашей визуализации функции:

void Player::render() 
{ 
    gl::pushMatrices(); 
    gl::translate(position.x, position.y); 
    gl::translate(20,20); 
    gl::rotate(my_degree); 
    gl::translate(-20,-20); 
    // do other render operations 
    gl::popMatrices(); 
} 

с обновлением просто быть

void Player::update(float degree) 
{ 
    my_degree=degree; 
} 

, поскольку каждый блок между соответствие pushMatrix и popMatrix не зависит так код, который вы имели в вашем обновление было Noop

+0

о мой, как я мог не заметить, что ... большое спасибо :) –

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