如何识别非规则精灵图像的触摸?

Posted

技术标签:

【中文标题】如何识别非规则精灵图像的触摸?【英文标题】:How to recognize the touch of a non regular sprite image? 【发布时间】:2010-03-23 03:59:24 【问题描述】:

我有一个精灵,如果它被触摸,触摸应该被识别。我使用坐标来做到这一点。我取了精灵图像的坐标(最小 x,最小 y,最大 x,最大 y)。但是精灵图像不是矩形。因此,即使我触摸精灵外部和矩形边界内的坐标,精灵也会被识别。 但是对于我的应用程序,我只需要识别精灵。所以,我必须只取精灵的坐标,但它不是规则的形状。我在我的程序中使用 CCSprite。

那么,我只能对要选择的精灵做些什么呢?应该使用哪些类? 谢谢。

【问题讨论】:

【参考方案1】:

您可以尝试以下方法之一...

创建一个小于精灵图像绝对范围的边界框。是的,它会比精灵小。这将消除精灵的死区点击检测,权衡是您的精灵的一部分,看起来不可以选择

使用圆形边界区域来检测用户是否点击了您的精灵。同样,在我的第一个建议中,您会遇到死区问题,但球体可能会为您提供比精灵更好的覆盖区域,从而在触摸检测方面获得更好的结果

这是物理碰撞检测系统中的一个标准问题,通常最终使用圆形或矩形作为其碰撞体。我会选择一个小于精灵大小的圆形或矩形作为边界区域。比生成边界区域多边形更精细。然而,这会带来一大堆新问题和顾虑。

【讨论】:

【参考方案2】:

我现在正在构建一个 Cocos2D 游戏,我要做的是首先遍历我的精灵并查看触摸命中的精灵(它们在我的应用程序中重叠)

然后,对于每个精灵命中,我使用 [sprite convertTouchToNodeSpace] 来获取精灵内部的 X、Y 坐标,我可以使用它(尽管 Y 轴被翻转)来引用我创建精灵的 CGImage。

如果触摸点处的像素是“清晰”的,即 alpha 0,那么精灵并没有真正被触摸,我会检查 z 顺序中的下一个精灵,看看它被触摸的地方是否有颜色。

有时我认为我应该使用两个颜色的蒙版图像来配合每个精灵,而不是精灵图像。但是,我是先生。让它发挥作用,然后让它变得更快。

我意识到这不是超级高效,但我没有很多精灵,我这样做只是为了触摸。

【讨论】:

以上是关于如何识别非规则精灵图像的触摸?的主要内容,如果未能解决你的问题,请参考以下文章

无法识别导航栏的图像视图上的触摸。?

OpenCV - 滑动拼图验证码自动识别与匹配

如何创建一个不规则形状的图像按钮,其中图像的透明部分不可点击?

工控电脑触摸显示屏幕监控报警方案-基于WiFi摄像头定时拍照图像识别技术

图像精灵-如何获得图像的一部分

如何从精灵图像中找到图像的像素位置[关闭]