我很难获得像检测精灵上的触摸一样简单的工作......有人可以帮忙吗?我正在尝试创建一个方法作为CCSprite的类别,给定一个点或触摸将返回YES如果该点在精灵内,否则返回NO。
目前我有一个实现,当精灵不是来自Zwoptex的裁剪纹理的一部分时(例如,用于精灵的图像没有被修剪),这似乎有效。
CGPoint point = [touch locationInView:[touch view]];
point = [[CCDirector sharedDirector] convertToGL: point];
CGRect spriteRect = self.textureRect;
spriteRect.origin = ccpAdd(ccpSub(self.positionInPixels, self.anchorPointInPixels), self.offsetPositionInPixels);
return CGRectContainsPoint(spriteRect, point);
我发现如果在原始纹理中修剪了精灵,这不起作用。这种变化似乎可以解决问题
CGRect spriteRect = self.textureRect;
spriteRect.origin = ccpAdd(self.offsetPositionInPixels, self.positionInPixels);
return CGRectContainsPoint(spriteRect, [self convertTouchToNodeSpaceAR:touch]);
但是现在我有一组来自帧缓存的精灵似乎不喜欢这个!它们被修剪,我看不出与上面代码一起使用的精灵有什么不同。有人能否阐明convertTouchToNodeSpaceAR的含义:?我确定问题在于我的无知,并且在Cocos2d框架中有一种共同的优雅方式...
答案 0 :(得分:0)
问题可能是CGRectContainsPoint();
。我有一段时间遇到同样的问题,我怀疑我们所比较的矩形和点数没有转化为相同的点系统,产生负面结果。
解决方案:
选项1可能对您的需求更有意义,但我需要经常引用相对于彼此的精灵位置,这对我来说是有意义的。
如果你想使用选项1,我会建议你得到一些NSLog并打印出一个矩形点和你要比较的点,并弄清楚它们的不同之处。