繁体   English   中英

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

[英]How to detect a touch on transparent area of an image in a (libgdx) stage?

有人可以帮助检测我在舞台上作为演员使用的图像的触摸。 图像实际上是一个长对角画笔,有很多透明区域。 问题是当我触摸画笔图像的透明区域时,它也会触发图像的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 之前测试交集(这可以允许将触摸转发到舞台上的其他对象)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM