Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二维移动摄像机(LWJGL)_Java_Opengl_2d_Lwjgl - Fatal编程技术网

Java 二维移动摄像机(LWJGL)

Java 二维移动摄像机(LWJGL),java,opengl,2d,lwjgl,Java,Opengl,2d,Lwjgl,我目前正在用LWJGL开发一个2D RPG,并且仍处于开发的引擎阶段。我有很多我想要创造的技术,但我的一个大问题是把相机固定在播放器上。我看到的所有解决方案都涉及移动世界和保持玩家静止,这是可行的,但如果不密切监控,这显然会导致一些计算问题。通常,我会编写一个不必担心的系统,但我拒绝了,因为我最终打算添加多人游戏功能,在这个系统中,移动世界将无法运行 有没有一种方法可以将相机固定到可以移动的对象或点上,而无需使用“平移”来移动世界?另外,如果可能的话,我想避免滑头。这将需要我重新设计我的游戏引擎

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


有没有一种方法可以将相机固定到可以移动的对象或点上,而无需使用“平移”来移动世界?另外,如果可能的话,我想避免滑头。这将需要我重新设计我的游戏引擎,使其保持目前的状态。

每当你要将3d视口投影到2d屏幕上时,你需要根据观察者的视角(所谓的相机或视图)移动所有东西

我想你逃不掉了。您通常使用的是一个
摄影机
对象,该对象保持用于构建视图矩阵的位置和旋转,该视图矩阵通过
均匀
传递到着色器,并传递到场景的顶点。将变换矩阵传递给着色器是一种常态,因此您不应该感到负担过重。始终可以使用透视矩阵对其进行预乘

你必须移动整个世界来匹配你的相机的位置,因为你需要改变场景中的一切,因为它是从这个角度看的,否则你怎么能把它投射到你的屏幕上呢?没有“移动相机,保持世界静止”的概念。

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


正常绘制ui以外的所有内容,然后根据玩家位置(即
glTranslate2f(-player.x,-player.y)
)将其全部翻译。这一切都是在render方法中完成的。在网络多人游戏中,视口是针对特定的玩家进行的(即,Bob的屏幕根据Bob的位置进行转换,Jane的屏幕根据Jane的位置进行转换)。如果您想要单屏多人游戏,您可能需要使用多帧缓冲区(每个玩家一个),并将其用作视口。

两个问题:一个,这是一个2d项目,所以我不知道您的3d知识应用了多少。第二,如果世界在移动,那么如果每个玩家都在移动他们周围的世界而不是移动他们自己,那么多人游戏到底是如何工作的呢?我添加了
glTranslatef(-game.player.getX(),-game.player.getY(),0)到我的主渲染方法,就在
Display.update()之前,但我没有得到任何结果。玩家的位置在这些方法中保持不变。应该在渲染玩家之前而不是之后调用GLTRANSTEF。您应该推送一个转换矩阵glTranslatef(…),绘制世界、敌人和角色,弹出转换矩阵,绘制UI,然后调用Display.update()。