如何检查CCSprite内的像素是否透明

时间:2011-12-30 10:17:27

标签: ios cocos2d-iphone

每个CCSprite都是一个regtangle区域,但它的某些部分是可见的,意味着我们看到的图像而其他部分不是。所以我想知道当我触摸CCsprite时触摸点是可见区域还是透明区域,有没有办法检查这个,比如获取触摸点的像素颜色??

1 个答案:

答案 0 :(得分:3)

使用OpenGL API可以做到这一点,但这是错误的解决方案。我建议检测精灵形状内的抽头点(将手动定义)。要计算边界形状,您可以使用此工具:SpriteHelper。要检查多边形内部的点(甚至是非凸面),有很好的algorythm:Determining if a point lies on the interior of a polygon。我在iPhone游戏中使用这种方法。

与直接检查像素不透明度相比,这种方法的有效性:

  • 性能:要在OpenGL中获取像素,你需要锁定纹理并从中读取数据,这将导致FPS掉落
  • 准确度:点击不是鼠标点击,它意味着一些区域,所以你可能会检查精灵形状内的一些区域(例如水龙头圈)
  • 灵活性:您可以根据需要调整形状

PS:如果你肯定想要检查像素,一个很好的解决方案是制作额外的纹理像素布尔图(每个位响应像素阈值)。