LibGDX - Scene2D平移

时间:2015-09-26 14:24:08

标签: java libgdx scene2d panning

我最近一直在做一个项目,我的作业 好吧,到了这一点,我有一个Screen2D的Screen实现,我的问题是我在小部件上的触摸事件我不会停在小部件上。
我的意思是,如果我弹出一个窗口,并尝试移动它,它也触发我的图形上的平移,或者如果我移动滑块,它也平移相机。

此处my project on GitHub
我的活动是在Pantalla on Core类Here上配置的。提前致谢。

1 个答案:

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

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