-3

我有两个精灵:一个是角色精灵,另一个是障碍精灵。障碍精灵是另一个名为 bgSprite 的精灵的子精灵,它不断移动。我如何检测它们之间的碰撞。请帮我。在此先感谢
这是一些代码:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"BoyRunAnimation.plist"];

CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"BoyRunAnimation.png"];
[self addChild:spriteSheet];        

self._character = [CCSprite spriteWithSpriteFrameName:@"Boy_Run_0003.png"];
self._character.position = ccp(80, 150);
[spriteSheet addChild:self._character];
[self boyRunningAnimation];

//障碍

for (int i=0; i<5; i++)
{
    int xPos=500+500*i;
    if (xPos<2*_roadImage1.contentSize.width)
    {
        CCSprite *obstacle=[CCSprite node];
        obstacle.textureRect=CGRectMake(0, 0, 50, _roadImage1.contentSize.height);
        obstacle.color=ccc3(255, 255,255);

        if (xPos <= _roadImage1.contentSize.width)
        {
            obstacle.position=ccp(xPos, _roadImage1.contentSize.height/2);

            [_roadImage1 addChild:obstacle z:0 tag:1];
        }
        else
        {
            obstacle.position=ccp(xPos-_roadImage1.contentSize.width, 60);

            [_roadImage2 addChild:obstacle z:0 tag:2];
        }
        [obstacleArray addObject:obstacle];
    }    
}

并在更新中:

if (CGRectIntersectsRect(self._character.boundingBox, obstacle.boundingBox))
{
    isTouchActive=NO;

    NSLog(@"collision");
}
4

1 回答 1

1

问题出在父母身上。_character 的父级和障碍的父级不是同一个 CCNode,因此它们的位置没有公共空间。您需要将一个 boundingBox 的位置转换到另一个空间。

编辑:

 CCRect obstacleBox = [obstacle boundingBox];
 CCPoint obstaclePosition = obstacleBox.origin;
 obstaclePosition = [[obstacle parent] convertToWorldSpace:obstaclePosition];
 obstaclePosition = [[self._character parent] convertToNodeSpace:obstaclePosition];
 obstacleBox.origin = obstaclePosition;
 if (CGRectIntersectsRect(self._character.boundingBox, obstacleBox))
    {
        isTouchActive=NO;
        NSLog(@"collision");
    }
于 2013-09-25T12:26:12.993 回答