【问题标题】:Libgdx scene2d Touchpad gets 'inverted' when setting bounds too small当设置边界太小时,Libgdx scene2d 触摸板会“反转”
【发布时间】:2023-04-01 06:40:02
【问题描述】:

我正在使用 Java 和 Libgdx scene2d 制作游戏。这是我在构造函数中的代码:

atlas = new TextureAtlas("gfx/button.pack");
skin = new Skin(atlas);

TouchpadStyle touchpadStyle = new TouchpadStyle();
touchpadStyle.background = skin.getDrawable("button.up");
touchpadStyle.knob = skin.getDrawable("button.down");
touchpadStyle.knob.setLeftWidth(20);
touchpadStyle.knob.setRightWidth(20);
touchpadStyle.knob.setBottomHeight(20);
touchpadStyle.knob.setTopHeight(20);
controller = new Touchpad(1f, touchpadStyle);
addActor(controller);

然后在 resize() 中我执行以下操作:

public void resize(float width, float height) {
    setViewport(width, height, true);

    //TODO setting the bounds too small breaks the touchpad?
    controller.setBounds( width*1f/16, height*1f/9, width/7f, width/7f); 
}

问题是,当我将屏幕(我正在运行桌面版本)调整到足够小的宽度时,触摸板会以某种方式“反转”。当我触摸触摸板时,背景似乎在顶部并且正在移动。它给出的方向(percentX,percentY)也是它应该是负数。

为什么会发生这种情况,我该如何预防?

【问题讨论】:

    标签: java libgdx touchpad scene2d


    【解决方案1】:

    如果您想要一个始终占屏幕 1/7 的控制器,为什么要使用像素完美的舞台?在您的调整大小方法中为什么不这样做:

        virtualStage.setViewport(MyGame.VIRTUAL_WIDTH, MyGame.VIRTUAL_HEIGHT, true);
        virtualStage.getCamera().translate(-virtualStage.getGutterWidth(),-virtualStage.getGutterHeight(), 0);
        Camera c = virtualStage.getCamera();
        c.update();
    

    如果您愿意,您可以省略翻译(取决于您在右侧显示的内容)。我想知道在调整大小时更改控制器的边界是否会造成问题。

    【讨论】:

    • 我现在就是这样做的。它确实有效,尽管当我使屏幕的长度变宽而高度变窄时,hud 元素会愚蠢地远离边界。但我想这对于移动屏幕分辨率和桌面来说是可以的,他们甚至会将窗口调整到那种分辨率。所以现在触摸板正在工作,但我仍然想知道当我将它的大小调整得太小时是什么破坏了它......
    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多