我正在尝试为我在 LibGDX 中制作的游戏创建 UI。但是,当我使用世界单位时,鼠标输入无法正确对应,并且根据屏幕尺寸而关闭。如何确保鼠标输入始终与我们在屏幕上看到的相同?
public class MainMenuScreen implements Screen {
final ClientLauncher game;
private Texture playButtonInactive;
private Texture playButtonClicked;
private Texture playButtonActive;
// Camera and Viewport stuff
private OrthographicCamera camera;
private Viewport viewport;
Sprite theWorld;
// World unit
private static final float WORLD_WIDTH = 1920;
private static final float WORLD_HEIGHT = 1080;
float x = (float)ClientLauncher.width / 9;
float y = (float)ClientLauncher.height / 2;
if ((Gdx.input.getX() > x && Gdx.input.getX() < x + playButtonActive.getWidth()) && (Gdx.input.getY() < y - 100 && Gdx.input.getY() > y - 100 - playButtonActive.getHeight())){
game.batch.draw(playButtonInactive,x,y + 100);
if(Gdx.input.isButtonPressed(Input.Buttons.LEFT)){
game.batch.draw(playButtonClicked,x,y + 100);
game.setScreen(new GameScreen(game));
}
}
else{
game.batch.draw(playButtonActive,x,y + 100);
}
ClientLauncher 的宽度和高度分别为 1920 和 1080,因此与我的世界单位相同。 谢谢!
这只是一个快速演示,因此我对这些值进行了硬编码,但我试图了解世界单位的结构以及如何在绘图时使用它们并使所有内容同步。
这个链接应该对您非常有用: https://libgdx.com/wiki/graphics/2d/scene2d/scene2d 我建议在提问之前阅读所有 wiki - 它不是那么大,并且很好地解释了框架的几乎每个方面。
Viewport 就是您所需要的,该页面上对此进行了解释。它还解释了演员命中检测的工作原理,这是代码的另一个问题