如何限制LibGDX中触摸板旋钮仅沿水平轴移动
让LibGDX触摸板旋钮仅左右移动的解决方案
我之前也碰到过同样的需求——想把TouchPad的旋钮限制在水平方向,不让它上下晃。其实只要自定义一个TouchPad子类,重写它计算旋钮位置的方法就能搞定,具体步骤如下:
1. 自定义水平触摸板类
创建一个继承自TouchPad的类,重写calculateKnobPosition方法,强制把旋钮的垂直方向位置固定住:
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.ui.TouchPad; import com.badlogic.gdx.scenes.scene2d.ui.TouchPad.TouchPadStyle; public class HorizontalTouchPad extends TouchPad { public HorizontalTouchPad(float deadzoneRadius, TouchPadStyle style) { super(deadzoneRadius, style); } @Override protected void calculateKnobPosition(Vector2 knobPercent) { // 先调用父类方法计算基础位置 super.calculateKnobPosition(knobPercent); // 强制将垂直方向的百分比设为0,取消垂直偏移 knobPercent.y = 0; // 根据修正后的百分比计算最终位置,固定垂直中心 float knobX = getWidth() / 2 + knobPercent.x * (getWidth() / 2 - getKnobWidth() / 2); float knobY = getHeight() / 2; getKnob().setPosition(knobX - getKnobWidth() / 2, knobY - getKnobHeight() / 2); } }
2. 使用自定义触摸板
在你的UI代码里,像使用普通TouchPad一样创建这个自定义类的实例即可:
// 假设你已经定义好了TouchPadStyle实例touchPadStyle float deadzoneRadius = 10f; // 根据需求设置死区半径,避免误触 HorizontalTouchPad horizontalTouchPad = new HorizontalTouchPad(deadzoneRadius, touchPadStyle); // 设置触摸板的尺寸与位置 horizontalTouchPad.setSize(200f, 100f); horizontalTouchPad.setPosition(50f, 50f); // 添加到舞台中使用 stage.addActor(horizontalTouchPad);
关键说明
calculateKnobPosition是TouchPad计算旋钮位置的核心方法,我们通过将knobPercent.y设为0,直接移除了垂直方向的移动逻辑。- 最终把旋钮Y轴固定在触摸板垂直中心,确保它只会在水平方向来回滑动,完全不会上下移动。
- 死区半径的作用和普通TouchPad一致,用来定义触发移动响应的最小触摸距离,按需调整即可。
这样改完之后,你的触摸板旋钮就只能左右移动啦,亲测有效!
内容的提问来源于stack exchange,提问作者Grinning Trout
相关产品推荐
相关产品推荐

