我对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?
答案 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);