截图:
我的Screen
只有一个Stage
。该Stage
具有一组Group
对象,我将其视为层。第一组具有背景,中间的组具有游戏元素,而最前面的组具有屏幕叠加层。
叠加层由一个Image
(屏幕本身)和四个TextButton
(每个角落一个)组成。
如果不考虑叠加层中的图像位于所有内容之前,则会很好地工作。即使图像是透明的,它仍然在触摸事件到达游戏层之前拦截它们。
所以我的问题是:如何使叠加层中的图像忽略所有触摸事件,以便游戏层将其获取并可以实际进行游戏?
我尝试了一个想法,但我不确定这是否是正确的方法:我尝试将图像创建为自定义Actor
,始终将其高度/宽度设置为0,但仍然(通过重载draw()方法)在整个屏幕上绘制图像。这非常有效,除了事实是该图像以某种原因在较低层中绘制。
截图:https://dl.dropboxusercontent.com/u/1545094/Screen2.png
在此截图中,我打开了一个指示消息框,将其添加到游戏层之一(组6)。请注意,叠加层中的所有按钮(即组7)都在消息框前面,但屏幕框架(自定义Actor)以某种方式在消息框后面绘制。为什么会这样呢?
注意:如果我采用完全相同的情况,并将我的自定义演员更改为常规Image,则所有内容都将正确绘制,但是,如上所述,我将无法单击较低层中的任何内容。
以下是我的自定义Actor,如果有人能看懂的话:
public class ClickThroughImage extends Actor {
BaseDrawable d;
public NonexistingImage(BaseDrawable d){
this.d = d;
setSize(0, 0);
}
@Override
public void draw(SpriteBatch batch, float parentAlpha) {
d.draw(batch, 0, 0, 1024, 768); //Yes, I tried swapping these two lines.
super.draw(batch, parentAlpha); //It had no effect.
}
}