您的问题是您正在使用带有所有演员(小部件等)的舞台作为相机手势动作的输入处理器。这意味着每当您对属于它的任何演员应用某种手势时,它都会触发。
解决方案是为当前阶段的相机手势创建另一个阶段。所以你的代码应该是这样的:
//show method
viewport = new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
// Creamos el stage, el cual albergara los botones entre otras cosas
stage = new Stage(viewport);
cameraStage = new Stage(viewport); //I'm not super-sure if you can user viewport second time - if not create new one
...
//render method
stage.act();
stage.draw();
cameraStage.act();
cameraStage.draw(); //cameraStage is drawn after stage so it will be over it!
...
然后您应该将所有与相机手势相关的侦听器添加到 cameraStage 而不是舞台但它的功能当然应该影响静止演员舞台。
好的,那么您有两个阶段,摄影机阶段在演员的舞台上方,因此您可以随意触摸任何地方,并且您确定您正在触摸两个阶段,您现在要做的就是将两个阶段都设置为输入处理器演员舞台为第一,相机舞台为第二,您将确保演员舞台的事件首先进行。
您需要InputMultiplexer 来执行此操作。代码的主要方案是:
InputMultiplexer inputMultiplexer = new InputMultiplexer();
inputMultiplexer.addProcessor(stage);
inputMultiplexer.addProcessor(cameraStage);
Gdx.input.setInputProcessor(inputMultiplexer);
现在您的小部件事件将作为第一个处理。
如果某些东西不起作用,还可以考虑在触碰舞台时从 inputMultiplexer 中删除 cameraStage,并在触碰时再次添加它。
还有一个简单的建议 - 特别是当您创建一个将在未来共享的工具时,在代码中使用英文变量/方法/等名称 - 其他用户会更清楚