我目前正在使用LWJGL开发2D RPG,并且仍处于开发的引擎阶段。我有很多我想创造的技术,但我的一大问题是将相机固定在播放器上。我所看到的所有解决方案都涉及到移动世界并保持玩家静止,这可以起作用,但是如果没有密切监视,这似乎会导致一些计算问题。通常情况下,我会编写一个系统,我不必担心它,但我拒绝,因为我最终打算添加多人游戏功能,移动世界将无法播放。
有没有办法将相机粘贴到可以移动的物体或点上而无需使用平移来移动世界?另外,如果可能的话,我想避免Slick。这将要求我重新修改我目前的大部分游戏引擎。
答案 0 :(得分:0)
每当您要将3D视口投影到2d屏幕上时,您需要根据观察者的视点(所谓的相机或视图)移动所有内容。
我想你无法摆脱这一点。你通常做的是拥有一个Camera
对象,它保存位置和旋转,用于构建视图矩阵,通过uniform
到着色器传递到场景的顶点。将转换矩阵传递给着色器是常态,因此您不应该感到担忧。你总是可以用透视矩阵预乘它。
您必须移动整个世界以匹配相机的位置,因为您需要根据该视角来转换场景中的所有内容,否则您如何将其投影到屏幕上?没有“移动相机,保持世界静止”的概念。
答案 1 :(得分:0)
以可视方式移动世界 ,这就是每个其他RPG如何做到的。不要移动现实世界的位置。
除了ui之外通常绘制所有内容,而不是根据玩家位置(即glTranslate2f(-player.x,-player.y)
)进行全部翻译。这都是在render方法中完成的。在联网的多人游戏中,视口是针对该特定玩家完成的(即,Bob的屏幕根据Bob的位置进行翻译,Jane的翻译基于Jane的位置)。如果你想要单屏多人游戏,你可能不得不使用多个帧缓冲区(每个玩家一个),并将它们用作视口。