我有两个演员:
和:
我首先将蓝色演员添加到舞台上,其次是红色演员:
blueActor.setPosition(100, 100, Align.center);
redActor.setPosition(100 - 20, 100 + 20, Align.center);
blueActor.addListener(blueListener);
redActor.addListener(redListener);
stage.addActor(blueActor);
stage.addActor(redActor);
这些演员看起来像这样:
如果他们的InputListener
为ZIndex
,他们的听众Touchable
依赖于enable
,如下所示:
到目前为止,如果屏幕的输入处理器仅阶段,一切正常:
Gdx.input.setInputProcessors(stage);
但如果屏幕的输入处理器是两个处理器Stage
和InputProcessor
,
inputMultiplexer = new InputMultiplexer(this, stage);
Gdx.input.setInputProcessor(inputMultiplexer);
如图所示,将触及两个演员:
在这种情况下 HOW 我可以像第一种情况一样分开这些演员的两个听众吗?
答案 0 :(得分:2)
Multiplexer
后,public InputMultiplexer (InputProcessor... processors) {
for (int i = 0; i < processors.length; i++)
this.processors.add(processors[i]);
}
的构造函数按您添加的顺序添加参数。
touchDown
然后在public boolean touchDown (int screenX, int screenY, int pointer, int button) {
for (int i = 0, n = processors.size; i < n; i++)
if (processors.get(i).touchDown(screenX, screenY, pointer, button)) return true;
return false;
}
事件中,它以相同的顺序运行它们。
inputMultiplexer = new InputMultiplexer(this, stage);
请注意,一旦any返回true,它也会返回true并停止循环。
所以当你这样做时:
touchDown
首先为this
执行stage
,然后为inputMultiplexer = new InputMultiplexer(stage, this);
执行Multiplexer
。由于Red在舞台上,你会想要切换这样的顺序,以便Red可以先处理事件。
0 [sig] bash 9796 get_proc_lock: Couldn't acquire sync_proc_subproc for(5,1), last 7, Win32 error 0
但是,让我们说你现在有绿色,这也是在舞台上,但应该落后于蓝色。您必须创建自己的1040 [sig] bash 9796 proc_subproc: couldn't get proc lock. what 5, val 1
类,可能是子类,只需覆盖touchDown,并使用您自己的方法组合/排序每个处理器中的对象侦听器,该方法使用zIndex来决定顺序 < / p>