cocos2d sprite碰撞检测

问题描述:

我目前正在使用cocos2d创建一个点并点击app的应用程序。然而,在我目前的实现中,碰撞检测条件只有在我点击左上角而不是精灵内的任何地方时才是正确的。如果我将锚点位置设置为0,这会让事情变得更好,但这会导致我的旋转精灵功能中断。cocos2d sprite碰撞检测

这里是我的代码,任何人都可以在这里发现任何错误? 在我的初始化代码

if((self=[super init])) 
{  

     cocosGuy = [TouchableSprites spriteWithFile: @"Icon.png"]; 
     //[cocosGuy setAnchorPoint:CGPointMake(0, 0)]; 
     cocosGuy.position = ccp(200, 300); 
    //[cocosGuy setPosition: ccp(100,100)]; 
     [self addChild:cocosGuy]; 
    self.isTouchEnabled = YES; 
} 
在touchBegan

我确定图像是否被触摸

CGPoint pt = [touch locationInView:[touch view]]; 
    CGPoint ptConv = [[CCDirector sharedDirector] convertToGL:pt]; 

CGSize size = [cocosGuy contentSize]; 
CGPoint point = [cocosGuy position]; 
CGRect rect = CGRectMake(point.x, point.y, size.width, size.height); 

if (CGRectContainsPoint(rect, ptConv)) 
{ 
    retValue = YES; 
} 

任何帮助,将不胜感激

您生成RECT采用触摸点,然后将该点的矩形作为拐角。

CCSprites的原点位于图像中间。所以,你需要考虑的是让你的矩形

CGRect rect = CGRectMake(point.x - (size.width/2), point.y - (size.height/2), size.width, size.height);

为了应对旋转的最好办法是触摸点转换成精灵局部空间(这也将正确处理缩放和精灵层次)

CGPoint ptConv = [cocosGuy convertTouchToNodeSpace: touch]; 
if (CGRectContainsPoint ([cocosGuy boundingBox], ptConv) 
{ 
    retValue = YES; 
} 
+0

感谢球员们,我在你的帮助下对它进行了整理,同样这条线没有帮助旋转,摆脱了它解决了部分问题 – godzilla 2012-03-25 01:44:08

+0

[selSprite runAction:[CCRotateTo actionWithDuration:0.1 angle:0]]; – godzilla 2012-03-25 01:44:54