Java Libgdx阶段按钮在错误位置触摸事件

Java Libgdx阶段按钮在错误位置触摸事件,java,button,libgdx,viewport,Java,Button,Libgdx,Viewport,我的libgdx stage按钮有问题 我的游戏是以16/9的速度运行,有一个FitViewport。但我正试图使我的HUD对多屏幕纵横比做出响应。例如,我希望我的“暂停”按钮而不是此按钮(其仍在设置为16/9的fitviewport中绘制): (16/9中带有工作按钮的图像) 我通过添加这行代码(我也将其用于我的背景)修复了此问题 按钮现在正在绘制,如下所示: (带有按钮的图像仍然从第一张图像中获得旧的触摸事件) 现在我来谈谈真正的问题。按钮正在绘制,就像我希望它们被绘制一样。但触摸事件仍然发

我的libgdx stage按钮有问题

我的游戏是以16/9的速度运行,有一个FitViewport。但我正试图使我的HUD对多屏幕纵横比做出响应。例如,我希望我的“暂停”按钮而不是此按钮(其仍在设置为16/9的fitviewport中绘制):

(16/9中带有工作按钮的图像)

我通过添加这行代码(我也将其用于我的背景)修复了此问题

按钮现在正在绘制,如下所示:

(带有按钮的图像仍然从第一张图像中获得旧的触摸事件)


现在我来谈谈真正的问题。按钮正在绘制,就像我希望它们被绘制一样。但触摸事件仍然发生在我第一张照片中的老按钮位置。有人知道解决这个问题的更好方法吗?我尝试查看多个视口,但找不到一个好方法来处理多个视口。

如果使用的是后台,请不要调用
glViewport
,因为后台使用的是一个试图管理
glViewport
调用的视口类。这会把你搞砸的

接下来,确保您正在调用
stage.getViewport().update(width,height,true)
中的
resize
,正如@noone所说。如果你不这样做的话,Stage2d永远不会表现得正确


最后,使用ExtendViewport而不是FitViewport。如果游戏本身需要FitViewport,则使用一个单独的Stage实例及其自己的UI视口。您可以使用InputMultiplexor组合两个阶段的输入。

您不能将glViewport与16/9视口组合使用。另外:在resize中执行stage.getViewport().update(width,height,true)。@noone似乎不起作用。另外,我在libgdx示例中发现,fitviewport后面的背景的glViewport不应该这样使用吗?您可以这样使用,但随后必须通过stage.getViewport().apply()重新应用舞台的视口我将尝试使用输入多路复用器,我只是想找到一种很好的方法,将hud和游戏本身结合起来,具有16/9的纵横比和响应性的hud。感谢您的解释:-)
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());