我有一个宇宙飞船的图像,我想旋转它指向鼠标位置。 要计算我必须旋转的角度,我使用以下代码:
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秒钟左右,然后再指向鼠标。我的代码有什么问题吗?如果您需要更多代码,请发表评论,我不确定您需要多少信息。
答案 0 :(得分: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