0

我目前正在使用 LWJGL 开发 2D RPG,并且仍处于引擎开发阶段。我有很多我想要创建的技术,但我最大的问题之一是将相机固定在播放器上。我见过的所有解决方案都涉及移动世界并保持玩家静止,这可以工作,但很明显,如果不密切监控,这可能会导致一些计算问题。通常情况下,我会编写一个我不必担心的系统,但我拒绝了,因为我最终打算添加多人游戏功能,其中一个移动的世界将无法播放。

有没有办法将相机固定到可以移动的对象或点上,而无需使用 translate 来移动世界?另外,如果可能的话,我想避免使用 Slick。这将需要我重新设计我目前的大部分游戏引擎。

4

2 回答 2

0

以视觉方式移动世界,这是所有其他 RPG 的做法。但是不要移动实际世界的位置。

正常绘制除 ui 之外的所有内容,而不是根据玩家的位置(即glTranslate2f(-player.x,-player.y))翻译所有内容。这一切都在 render 方法中完成。在联网多人游戏中,视口是针对特定玩家完成的(即 Bob 的屏幕根据 Bob 的位置进行平移,Jane 的屏幕根据 Jane 的位置进行平移)。如果您想要单屏多人游戏,您可能必须使用多个帧缓冲区(每个玩家一个),并将它们用作视口。

于 2013-09-24T12:33:35.343 回答
0

每当您要将 3d 视口投影到 2d 屏幕上时,您都需要根据观察者的视点(所谓的相机或视图)移动所有内容。

我想你是逃不掉的。您通常做的是拥有一个Camera保存位置和旋转的对象,该对象用于构建视图矩阵,该矩阵通过uniform着色器传递到场景的顶点。将变换矩阵传递给着色器是常态,因此您不应该为此感到负担。您始终可以将其与透视矩阵预乘。

您必须移动整个世界以匹配相机的位置,因为您需要转换场景中从那个角度看到的所有内容,否则您如何将其投影到屏幕上?没有“移动相机,保持世界静止”的概念。

于 2013-09-24T02:11:22.983 回答