2013-12-12 136 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; 
} 

因爲匹配pushMatrixpopMatrix之間的每個塊是獨立的,所以你在有代碼的更新是一個noop

+0

哦,我的,我怎麼可以忽略...非常感謝你:) –