如何限制触摸板旋钮仅沿水平轴移动

时间:2018-02-04 14:35:04

标签: android libgdx scene2d touchpad

我希望LibGDX中的触摸板旋钮能够向右或向左移动,但不能向上或向下移动。这是我的代码:

Drawable touchBackground = touchpadSkin.getDrawable("touchBackground");
touchKnob = touchpadSkin.getDrawable("touchKnob");
touchpadStyle.background = touchBackground;
touchpadStyle.knob = touchKnob;
touchKnob.setMinHeight(80);
touchKnob.setMinWidth(30);

touchpad = new Touchpad(0.1f, touchpadStyle);
touchpad.setBounds(10, 100, 130, 130);
touchpad.getResetOnTouchUp();

ScrollPane scrollPane=new ScrollPane();
touchpad.setPosition(70,70);
touchpad.setOriginX(200);

stage.addActor(touchpad);
Gdx.input.setInputProcessor(stage);

1 个答案:

答案 0 :(得分:1)

我相信没有方便的解决方案。我只能想到一种可能的方法来实现这种行为 - 在{1}}之前添加InputListener并在通知其他听众之前纠正touchPad协调:

InputEvent

当然这看起来并不漂亮,也许有人会建议一个更清洁的解决方案。您应该知道它会更改final Touchpad touchpad = ...; // insert the listener before other listeners // to correct InputEvent coordinates before they are notified touchpad.getListeners().insert(0, new InputListener() { private Vector2 tmpVec = new Vector2(); @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { if (touchpad.isTouched()) return false; restrictAlongX(event); return true; } @Override public void touchDragged(InputEvent event, float x, float y, int pointer) { restrictAlongX(event); } @Override public void touchUp(InputEvent event, float x, float y, int pointer, int button) { restrictAlongX(event); } private void restrictAlongX(InputEvent inputEvent) { // convert local centerY to the stage coordinate system tmpVec.set(0f, touchpad.getHeight() / 2); touchpad.localToStageCoordinates(tmpVec); // set stageY to the touchpad centerY inputEvent.setStageY(tmpVec.y); } }); 坐标,并且相同的InputEvent将用于在InputEvent之后通知Actors。但我认为在大多数情况下这是可以接受的,除此之外,这应该有效。