2011-04-04 136 views
0

我真的很难得到像检测到精灵上的触摸工作一样简单...任何人都可以帮忙吗?我试图创建一个方法作为CCSprite的类别,如果点在精灵范围内,给定点或触摸将返回YES,如果不是,则返回NO。检测触摸小精灵并convertToNodeSpaceAR

目前,我已经一个实现,似乎当精灵是不是从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

问题可能是CGRectContainsPoint();。我有一段时间有同样的问题,我怀疑我们正在比较的指标和要点没有被转化为产生负面结果的同一点系统。

解决方案:

  1. 制作方法/定义能够正确地转换了彼此之间的单点系统。
  2. 我做了什么:创建一个网格类,跟踪网格上的精灵位置并将触摸转换为网格上的点。

选项1可能对您的需求更有意义,但我需要经常参考相对于彼此的精灵位置,所以对我来说它是有意义的。

如果你想要使用选项1,我会建议获得一些NSLogs并打印出一个矩形点和你正在比较的点,并找出不同之处。

+0

你好,我很想去选择1,但我不确定我的精灵在什么点系统以及有哪些系统可用。我只是很关心convertToNodeSpace方法的功能...... – fedmest 2011-04-05 13:57:09