有人可以帮助检测我在舞台上用作演员的图像上的触摸吗?该图像实际上是一个长的对角线画笔,具有足够的透明区域。问题是,当我触摸画笔图像的透明区域时,也会触发图像的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");
    }
}

最佳答案

我认为libGDX Stage代码没有为设置Actor的其他边框/边界区域提供任何特定的支持。但是,您可以执行其他一些操作来解决此问题。

首先,在ClickListener中,如果触摸“无效”,则可以将其丢弃。例如,如果您有一个简化的边界区域(在对角画笔的情况下,您可以使用成角度的矩形)。或者,如果您想超精确,则可以将触摸区域映射回基础纹理,并检查像素是否清晰。

从libGDX API文档看来,您可以重写Actor上的hit方法来更改触摸的计算方式(并且大概是单击成功后才调用ClickListener)。这样一来,您就可以在调用ClickListener之前测试相交(可以将触摸转发到舞台上的其他对象)。

10-04 23:00