具有OpenGl和C ++的2D平台游戏相机

时间:2012-07-02 21:52:02

标签: c++ opengl camera glut

我正在尝试使用OpenGl制作2D平台游戏,并使用C ++制作过剩游戏。您可以使用左右箭头键移动播放器并使用空格跳转。我通过文本文件将所有平台加载到游戏中并打印到屏幕上。一切都很好。我遇到的问题是相机。当按下右箭头键时,我让玩家x的位置增加。问题在于,当发生这种情况时,我无法让实际的相机移动。这让我觉得不应该移动播放器,我应该使用glTranslatef将所有平台翻译到左边。这对我来说有点奇怪,我只是想知道这是不是应该怎么做。所以我想最后一个问题是,我应该翻译整个场景还是移动播放器?

3 个答案:

答案 0 :(得分:2)

移动相机,以glTranslate向与播放器相反的方向跟随播放器。

您应该将相机视为类似于玩家和其他可移动物品的游戏对象,并将该等级视为具有固定位置的静态对象。这使得放置游戏内物品和其他东西变得更加容易。

答案 1 :(得分:2)

实际上当你在OpenGL中“移动相机”时,由于实际上没有相机,内部完成的工作就是这样,在相反的方向移动场景中的所有内容。

至于解决方案,如果你使用过剩,你可以使用

gluLookAt(x,  y,  z,
          ex, ey, ez,
          0,  1,  0)

其中(x,y,z)是您想要相机的坐标,(例如,ey,ez)是您希望相机查看的方向向量(参考(x,y, z)坐标)和(0,1,0)是向上矢量。此函数执行所有必要的矩阵变换。更多信息here

如果您没有使用过剩,但只使用原始OpenGL,同样的链接也解释了您必须使用的等效opengl调用来实现与gluLookAt完全相同的效果

所以当你想移动相机时(可能只是左右两边,因为它是一个平台游戏)你只需要改变x值

答案 2 :(得分:0)

我使用以下内容工作了..

gl.PushMatrix()
gl.Translatef((1280/2)-float32((player.Body.Position().X)), 0, 0.0)

//Rest of drawing Code Code

gl.PopMatrix()

这是使用OpenGL + Chipmunk Physics(在GoLang,但应该适用,因为这些只是c绑定)。在这种情况下,1280是屏幕宽度。