我最近一直在做一个项目,我的作业
好吧,到了这一点,我有一个Screen2D的Screen实现,我的问题是我在小部件上的触摸事件我不会停在小部件上。
我的意思是,如果我弹出一个窗口,并尝试移动它,它也触发我的图形上的平移,或者如果我移动滑块,它也平移相机。
此处my project on GitHub
我的活动是在Pantalla on Core类Here上配置的。提前致谢。
答案 0 :(得分:1)
你的问题是你正在使用舞台与所有演员(小部件等)作为相机手势动作的输入处理器。这意味着每当你在任何属于它的actor上应用一些手势时它都会触发。
解决方案是仅为当前舞台上的相机手势创建另一个舞台。所以你的代码应该是这样的:
//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);
现在,您的小部件事件将作为第一个处理。
如果某些事情不起作用,请考虑在触发stade时从inputMultiplexer中删除cameraStage并在触摸时再次添加它。
一个简单的建议 - 特别是当你创建一个将来会共享的工具时,在代码中使用英文变量/方法/等名称 - 对其他用户来说会更清楚