我遇到了一些涉及多次触摸的问题。
有一个Stage(mainStage),上面有一个Actor(playLight,代码如下),一个HUD Stage(HUD.stage)和一个用于处理这两个阶段的InputMultiplexer。
inputMultiplexer= new InputMultiplexer();
inputMultiplexer.addProcessor(HUD.stage);
inputMultiplexer.addProcessor(mainStage);
我想用两个手指处理输入,这样一个手指可以移动我的物体,另一个手指可以上下滑动或双击我的舞台上的任何地方,除了当场我的演员在
我在主舞台上使用听众:...
mainStage.addListener(new ActorGestureListener(5,0.3f,0.4f,2f){
@Override
public void pan(InputEvent event, float x, float y, float deltaX, float deltaY) {
if(event.getPointer() == LightHandler.playerLight.pointerUsed){
listeningToPointer = -1;
return;
}
listeningToPointer= event.getPointer();
if(deltaY>0){
mainCharacter.up();
}
else{
mainCharacter.down();
}
}
@Override
public void tap(InputEvent event, float x, float y, int count, int button) {
if(count==2){
mainCharacter.clicked();
}
}
});
..以及此(mainStage)阶段的对象
playerLight.addListener(new DragListener(){
@Override
public void drag(InputEvent event, float x, float y, int pointer) {
pointerUsed = pointer; // will be reset to -1 at the end of update()
setPosition(getX()+ Gdx.input.getX(pointerUsed)-getWidth()/2f,getY()+Gdx.input.getY(pointerUsed)-getHeight()/2f);
}
@Override
public void dragStart(InputEvent event, float x, float y, int pointer) {
pointerUsed = pointer; // will be reset to -1 at the end of update()
isDragging = true;
}
@Override
public void dragStop(InputEvent event, float x, float y, int pointer) {
isDragging = false;
}
});
mainStage.addActor(playerLight);
两个听众都按照我的意愿工作。
问题是,当我用一根手指移动舞台上的对象(playerLight)并尝试用另一根手指向上平移Gdx似乎无法识别第二个输入或至少Gdx无法找到另一个ID的输入
我试过了:
答案 0 :(得分:0)
演员在Stage
添加时会有默认的侦听器。您应该做的是使用方法DragListener
而不是mainStage
使用pan
中的监听器。以下是您在mainStage
public void pan(InputEvent event, float x, float y, float deltaX, float deltaY)
{
// get a specific actor on the stage
if (event.getTarget().equals(actor))
{
float dx = x - actor.getWidth() / 2;
float dy = y - actor.getHeight() / 2;
actor.setPosition(dx,dy);
return;
}
}
就这么简单。我们会减去actor.getWidth() / 2;
和actor.getHeight() / 2;
,这样当您的手指触摸Actor
时,它会定位在您手指的中心。