Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在(libgdx)阶段检测图像的透明区域上的触摸?_Java_Android_Libgdx - Fatal编程技术网

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

Java 如何在(libgdx)阶段检测图像的透明区域上的触摸?,java,android,libgdx,Java,Android,Libgdx,有人能帮我检测一下我作为演员在舞台上使用的图像上的触摸吗。图像实际上是一个长的对角线画笔,有大量的透明区域。问题是,当我触摸画笔图像的透明区域时,它也会触发图像的ClickListener。我只希望在触摸可见图像时调用ClickListener,而不是图像的透明部分 我正在使用libgdx-0.9.4库。这是我的一段简单代码 import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2

有人能帮我检测一下我作为演员在舞台上使用的图像上的触摸吗。图像实际上是一个长的对角线画笔,有大量的透明区域。问题是,当我触摸画笔图像的透明区域时,它也会触发图像的
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代码不支持为参与者设置不同的边界框/边界区域。但是,你还可以做一些其他的事情来解决这个问题

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


从libgdxapi文档来看,您似乎可以覆盖Actor上的
hit
方法,以更改触摸的计算方式(假设只有点击成功时才会调用ClickListener)。这将允许您在调用ClickListener之前测试交叉点(这将允许将触摸转发到舞台上的其他对象)。

为此搜索了很多次。也许有一个简单的解决办法。很抱歉,我是libgdx新手。请帮帮我!!谢谢你的建议。我想我可以绑定图像的对角矩形。但是如果成功的话,像素检测将会非常好。