我最近一直在做一个项目,做作业。
好吧,说到重点,我有一个Scene2D的屏幕实现,我的问题是,我在小部件上的触摸事件并没有停止在小部件上。
我的意思是,如果我弹出一个窗口,并试图移动它,它也会触发我的图形上的平移,或者如果我移动一个滑块,它也会平移相机。
我的事件配置在Core,这里上的Pantalla类上
提前谢谢。
发布于 2015-09-26 16:40:28
您的问题是,您正在使用舞台与所有演员(小部件等)作为输入处理器的相机姿态动作。这意味着,每当你对属于它的任何演员施加某种姿态时,它就会触发。
解决方案是只为当前阶段的上的摄像机手势创建另一个阶段。因此,您的代码应该如下所示:
//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,而不是stage ,但是当然,它的功能应该会影响actor 。
好的,你有两个阶段,镜头阶段结束了,演员在舞台上,所以你可以随心所欲地触摸,你确定你在触摸两个阶段,你现在要做的是把两个阶段都设置为输入处理器,演员阶段作为第一阶段,相机阶段作为第二阶段,你将确保演员舞台上的事件作为第一阶段进行。
您将需要InputMultiplexer来完成这一任务。主要的编码方案是:
InputMultiplexer inputMultiplexer = new InputMultiplexer();
inputMultiplexer.addProcessor(stage);
inputMultiplexer.addProcessor(cameraStage);
Gdx.input.setInputProcessor(inputMultiplexer);现在,您的小部件事件将作为第一个处理。
如果有什么东西不起作用,那么也可以考虑在stade被移动时从inputMultiplexer中删除它,当stade被修饰时再添加它。
还有一个简单的建议--特别是当您创建一个将来将被共享的工具时,在代码中使用英语变量/方法/etc名称--这对其他用户来说会更清楚。
https://stackoverflow.com/questions/32798207
复制相似问题