Java 游戏开发-使用屏幕坐标与世界坐标

Java 游戏开发-使用屏幕坐标与世界坐标,java,libgdx,game-engine,Java,Libgdx,Game Engine,我和一位朋友都是游戏开发新手,我们讨论了世界坐标和屏幕坐标 我们正在关注一个关于libGDX的精彩在线教程系列,他们使用了100ppm(每米像素)的比例因子。如果重新调整屏幕大小,对象的缩放将不再起作用。我的朋友确信这不是问题,他可能是对的。但是,我的印象是,在开发游戏时,开发人员通常只应使用预定义的世界坐标系,并让相机将其转换为选定的屏幕坐标。我确实理解在使用鼠标点击等时进行反向转换的必要性。但是,在世界空间中放置和缩放对象是我关心的问题 我想向这个社区寻求一些专业的反馈。最好以每米的单位命名

我和一位朋友都是游戏开发新手,我们讨论了世界坐标和屏幕坐标

我们正在关注一个关于libGDX的精彩在线教程系列,他们使用了100ppm(每米像素)的比例因子。如果重新调整屏幕大小,对象的缩放将不再起作用。我的朋友确信这不是问题,他可能是对的。但是,我的印象是,在开发游戏时,开发人员通常只应使用预定义的世界坐标系,并让相机将其转换为选定的屏幕坐标。我确实理解在使用鼠标点击等时进行反向转换的必要性。但是,在世界空间中放置和缩放对象是我关心的问题


我想向这个社区寻求一些专业的反馈。

最好以每米的单位命名

当你调整屏幕大小时,你只需要设置一个新的投影矩阵,这样一切都可以正常工作)

你应该担心的是长宽比

其余的一切都无关紧要

所以,回答你的问题-保持世界坐标。
它还可以简单地添加物理、光线计算、任何尺寸(1.8个单位,而不是243个像素)

这是几乎所有Libgdx教程中最大的问题之一。它们很棒,但像素到米/单位的对话是错误的。
Libgdx为
Camera
提供了一个很好的解决方案,并为新的
Viewport
类提供了一个更好的解决方案(它在引擎盖下与
Camera
一起工作)

它非常简单,可以解决不同屏幕大小/纵横比的问题。
只需选择一个
Virtual\u Width
Virtual\u Height
(以米或类似单位考虑)。
例如,在2D platformer游戏中,人类相互争斗。假设我们人类身高2米,那么想想,一个人应该使用多少屏幕空间?如果我们说,一个人应该占据屏幕空间的1/10,那么我们的虚拟高度是10*2=20。现在想想你的目标是什么。假设它是16/9,那么你有一个大约35的虚拟宽度

接下来,您需要考虑您想要什么类型的
视口。确实要使用
视口
,它支持
虚拟宽度
虚拟高度

您可能需要一个
视口
,它保持纵横比,并用黑色条(
FitViewport
)填充屏幕的其余部分(如果屏幕具有不同的纵横比),或者您可能希望
视口
通过拉伸单元来填充整个屏幕(
StretchViewport

现在只需使用虚拟宽度和高度创建
视口
,并在
resize()
方法中使用给定的
宽度
高度更新它


希望能有帮助。

我支持你。每件事物的像素数是一个问题,因为它不仅会改变屏幕比例,还会改变纵横比。屏幕上的数字看起来是瘦的还是宽的取决于屏幕本身。这很糟糕。
开发人员通常只能使用预定义的世界坐标系,并让相机将其转换为所选的屏幕坐标。
这是正确的方法,可能更适合(我的意思是,“游戏开发”…)@Marco13实际上libgdx是一个游戏开发框架,因此大多数问题可能出现在“游戏开发”中是的,但我想也可以在这里提问和回答。每米的单位应该在模型上。模型中的1.0单位应为1米或任何单位,然后将视锥台设置为屏幕纵横比的任何单位。如果您以单位计算所有内容,则无需进行此对话,单位也可以为米,但这只是一个名称。在我看来,你应该以你的首选单位计算所有的东西,然后让相机把它转换成像素。这正是我的意思