1

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

4

3 回答 3

2

实际上,当您在 OpenGL 中“移动相机”时,由于实际上没有相机,因此内部所做的就是将场景中的所有内容都向相反方向移动。

至于解决方案,如果您使用的是 glut,您可以使用

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

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

如果您不使用 glut,而仅使用原始 OpenGL,则相同的链接还解释了您必须使用的等效 opengl 调用来实现与 gluLookAt 完全相同的效果

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

于 2012-07-02T22:03:26.493 回答
2

glTranslate通过与玩家相反的方向移动相机以跟随玩家。

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

于 2012-07-02T21:54:15.627 回答
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 是屏幕宽度。

于 2015-05-28T07:25:49.367 回答