2015-09-26 61 views
0

我最近一直在为一个项目做作业。
那么,我有一个Screen2D的屏幕实现,我遇到的问题是我的窗口小部件上的触摸事件不停留在窗口小部件上。
我的意思是,如果我弹出一个窗口,并尝试移动它,它也会触发我的图形上的平移,或者如果我移动滑块,它也会平移相机。LibGDX - Scene2D平移

这里的my project on GitHub
我的活动是在类Pantalla核心,Here
在此先感谢配置。

回答

1

你的问题是,你正在使用舞台与所有演员(小部件等)作为相机手势操作的输入处理器。这意味着每当你将任何属于它的演员应用某种手势时,它都会触发。

解决方案是为当前阶段上的相机手势创建另一个阶段。所以,你的代码应该是这样的:

//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,并在触摸时再次添加它。


一个简单的建议也 - 尤其是当你正在创建将在未来共享的工具,使用英语的变量/方法/等代码中的名字 - 这将是对其他用户

+0

更清楚呀,对于西班牙语的事情感到抱歉,这只是因为这是目前的团队任务,而且他们不善于处理英语(或者任何语言)。但感谢您的建议,我会添加英文评论和其他内容。好吧,让我试试 –

+0

嗯,它的工作!谢谢兄弟们,也是的,我可以使用相同的视口来支持相机和GUI,我的意思是,也许我会为GUI做另一个,因为当我在Android上运行应用程序时,按钮都很小。再次感谢! –