【问题标题】:How to recognize the touch of a non regular sprite image?如何识别非规则精灵图像的触摸?
【发布时间】:2010-03-23 03:59:24
【问题描述】:
我有一个精灵,如果它被触摸,触摸应该被识别。我使用坐标来做到这一点。我取了精灵图像的坐标(最小 x,最小 y,最大 x,最大 y)。但是精灵图像不是矩形。因此,即使我触摸精灵外部和矩形边界内的坐标,精灵也会被识别。
但是对于我的应用程序,我只需要识别精灵。所以,我必须只取精灵的坐标,但它不是规则的形状。我在我的程序中使用 CCSprite。
那么,我只能对要选择的精灵做些什么呢?应该使用哪些类?
谢谢。
【问题讨论】:
标签:
cocoa-touch
iphone-sdk-3.0
cocos2d-iphone
【解决方案1】:
您可以尝试以下方法之一...
这是物理碰撞检测系统中的一个标准问题,通常最终使用圆形或矩形作为其碰撞体。我会选择一个小于精灵大小的圆形或矩形作为边界区域。比生成边界区域多边形更精细。然而,这会带来一大堆新问题和顾虑。
【解决方案2】:
我现在正在构建一个 Cocos2D 游戏,我要做的是首先遍历我的精灵并查看触摸命中的精灵(它们在我的应用程序中重叠)
然后,对于每个精灵命中,我使用 [sprite convertTouchToNodeSpace] 来获取精灵内部的 X、Y 坐标,我可以使用它(尽管 Y 轴被翻转)来引用我创建精灵的 CGImage。
如果触摸点处的像素是“清晰”的,即 alpha 0,那么精灵并没有真正被触摸,我会检查 z 顺序中的下一个精灵,看看它被触摸的地方是否有颜色。
有时我认为我应该使用两个颜色的蒙版图像来配合每个精灵,而不是精灵图像。但是,我是先生。让它发挥作用,然后让它变得更快。
我意识到这不是超级高效,但我没有很多精灵,我这样做只是为了触摸。