Libgdx:你如何将控件与可移动对象分开?

时间:2014-03-27 07:48:45

标签: java libgdx touchpad

我对Libgdx很新。我查看了许多有用的教程,但没有实现以下结构。 我实现了一个可移动对象,它是InputAdapter的扩展,并覆盖keyDown / Up以更新其(对象)位置。 现在,我已经实现了一个touchPadController类,它具有在屏幕上可见的触摸板和旋钮。 然后,我添加了一个变量,它是touchPadController类的一个对象。

我未来的最终目标是将控件类与任何可移动的对象/字符完全分开。

问题: 我想只将setInputProcessor调用到可移动的对象/字符,而不是直接调用touchPadController类。我希望父可移动对象调用自己的控件。 但是,我不知道在哪里调用touchPadController函数会发生什么?

  • 我尝试了这个,但它不起作用:

    //movable object @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { Gdx.input.setInputProcessor(touchPadController); } //touchPadController @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { parent.newSpeedX = touchpad.getKnobPercentX() * Speed; parent.newSpeedY = touchpad.getKnobPercentY() * Speed; return true; }

*我应该在哪里调用父(可移动对象)中的touchPadController?

1 个答案:

答案 0 :(得分:1)

将您的控制器和您的角色/实体分开,如下所示:

public class Controller extends InputAdapter {
    private Entity _controllee;

    public void setControllee(Entity toControl) {
        _controllee = toControl;
    }

    // Override whichever InputAdapter methods you need to control your moveable objects, e.g.:
    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        _controllee.newSpeedX = touchpad.getKnobPercentX() * Speed;
        _controllee.newSpeedY = touchpad.getKnobPercentY() * Speed;
        return true;
    }
}

最后在ApplicationListener或Screen中的某个位置创建控制器的实例,通过setControlle将控制器附加到它,并将其设置为输入处理器,如下所示:

Controller myController = new Controller();
myController.setControllee(/*one of your movable objects*/);
Gdx.input.setInputProcessor(myController);