如何检测(libgdx)阶段图像透明区域的触摸?

时间:2012-11-17 22:18:23

标签: java android libgdx

有人可以帮助检测我在舞台上作为演员使用的图像的触摸。图像实际上是一个长对角刷,有很多透明区域。问题是,当我触摸画笔图像的透明区域时,它也会触发图像的ClickListener。我只希望在触摸可见图像时调用ClickListener,而不是图像的透明部分。

我正在使用libgdx-0.9.4库。这是我简单的代码。

import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.ClickListener;


Image brushImg = new Image(ImageCache.getTexture("brush"));
brushImg.width = mStage.width()*0.75f;
brushImg.height = mStage.height()*0.75f;

brushImg.setClickListener(new ClickListener() {
    @Override
    public void click(Actor actor, float x, float y) {          
        SoundFactory.play("brush");   
    }
}

1 个答案:

答案 0 :(得分:2)

我认为libGDX Stage代码没有任何特定的支持来为Actor设置不同的边界框/边界区域。但是,你可以采取其他一些措施来解决这个问题。

首先,在ClickListener中,如果它们“无效”,你可以扔掉它们。例如,如果您有一个简化的边界区域(在对角线笔刷的情况下,您可以使用有角度的矩形)。或者,如果您想要超精确,可以将触摸区域映射回底层纹理,并检查像素是否清晰。

从libGDX API文档中,您可以覆盖Actor上的hit方法来更改触摸的计算方式(并且可能只有在命中成功时才会调用ClickListener)。这将允许您在调用ClickListener之前测试交集(这可以允许将触摸转发到舞台上的其他对象)。