首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibGDX - Scene2D摇摄

LibGDX - Scene2D摇摄
EN

Stack Overflow用户
提问于 2015-09-26 14:24:08
回答 1查看 265关注 0票数 0

我最近一直在做一个项目,做作业。

好吧,说到重点,我有一个Scene2D的屏幕实现,我的问题是,我在小部件上的触摸事件并没有停止在小部件上。

我的意思是,如果我弹出一个窗口,并试图移动它,它也会触发我的图形上的平移,或者如果我移动一个滑块,它也会平移相机。

这是我在GitHub上的项目

我的事件配置在Core,这里上的Pantalla类上

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-26 16:40:28

您的问题是,您正在使用舞台与所有演员(小部件等)作为输入处理器的相机姿态动作。这意味着,每当你对属于它的任何演员施加某种姿态时,它就会触发。

解决方案是只为当前阶段的上的摄像机手势创建另一个阶段。因此,您的代码应该如下所示:

代码语言:javascript
复制
    //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来完成这一任务。主要的编码方案是:

代码语言:javascript
复制
    InputMultiplexer inputMultiplexer = new InputMultiplexer();

    inputMultiplexer.addProcessor(stage);
    inputMultiplexer.addProcessor(cameraStage);

    Gdx.input.setInputProcessor(inputMultiplexer);

现在,您的小部件事件将作为第一个处理。

如果有什么东西不起作用,那么也可以考虑在stade被移动时从inputMultiplexer中删除它,当stade被修饰时再添加它。

还有一个简单的建议--特别是当您创建一个将来将被共享的工具时,在代码中使用英语变量/方法/etc名称--这对其他用户来说会更清楚。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32798207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档