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 秒左右,然后没有正确指向鼠标。我的代码有什么问题吗?如果您需要更多代码,请发表评论,我不确定您需要多少信息。

4

1 回答 1

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

于 2013-12-12T09:54:14.053 回答