具有OpenGl和C++的2D平台游戏摄像机
2D platform game camera with OpenGl and C++
我正在尝试使用OpenGl和C++过剩来制作2D平台游戏。您可以使用左右箭头键移动玩家,并随着空间跳跃。我通过文本文件将所有平台加载到游戏中并打印到屏幕上。这一切都很好用。我遇到的问题是相机。当按下右箭头键时,我有玩家x位置增加。问题是,当这种情况发生时,我无法让实际的相机也移动。这让我觉得与其移动播放器,不如使用 glTranslatef 将所有平台向左平移。这对我来说似乎有点奇怪,我只是想知道这是否应该这样做。所以我想最后一个问题是,我应该翻译整个场景还是移动玩家?
移动摄像机以跟随玩家,方法是向与玩家相反的方向glTranslate
。
您应该将摄像机视为类似于玩家和其他可移动物品的游戏内对象,将关卡视为具有固定位置的静态对象。这使得放置游戏内物品和其他东西变得更加容易。
实际上当你在OpenGL中"移动相机"时,因为实际上没有相机,内部所做的就是这样,将场景中的所有东西都向相反的方向移动。
至于解决方案,如果您使用过剩,您可以使用
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 值
我使用以下方法得到了这个工作。
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 是屏幕宽度。
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++游戏中与库存系统作斗争
- 换位表导致测试失败(但在游戏中运行良好)
- Craps游戏问题,忽略if语句
- 矢量下标超出SFML游戏中的范围
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 平台游戏 - 下车时避免与平台碰撞
- 使用虚幻引擎4编程的平台游戏中的偏转问题
- 推荐哪个操作系统平台使用Android NDK进行本地游戏开发
- Qt创作者平台游戏 - 无法让它工作(初学者与QGraphics)
- 具有OpenGl和C++的2D平台游戏摄像机
- 用贴图检查2D平台游戏中的碰撞
- 将一款SDL 2.0游戏移植到Android平台
- 游戏引擎如何针对多个平台进行编译?
- 如何将cocos2dx游戏移植到android平台
- 在 C++ 中使用 SFML 1.6 的平台游戏 使用 AABB 的碰撞
- 为何游戏开发者难以为PC、Mac和Linux平台编写游戏?
- 2D盒子碰撞,平台游戏,我的玩家"hovers"在方块上
- 平台游戏(游戏邦注:如《马里奥兄弟》)碰撞失败