动作期间Cocos2d Sprite碰撞检测

时间:2013-12-10 14:06:26

标签: ios cocos2d-iphone

我无法检测到两个精灵之间的碰撞,一个正在行动中。

我有一个类“Enemy”的精灵,通过CCMoveTo在屏幕上移动,另一个由触摸控制的“Hero”类精灵,都添加到“MainGame”类的场景中

以下表示如何将两个精灵添加到场景中并且Enemy如何操作:

MainGame.m

-(id) init{
if( (self=[super init]) ) {
    _enemies = [[NSMutableArray alloc]init];

    _enemyLink = [Enemy nodeWithTheGame:self];
    _enemyLink.position = ccp(10, 10);
    [self.enemies addObject:_enemyLink];
    CCMoveTo *test = [CCMoveTo actionWithDuration:40 position:ccp(500, 250)];
    [_enemyLink runAction:test];

    _heroArray = [[NSMutableArray alloc]init];
    _heroLink = [Hero nodeWithTheGame:self location:ccp(100,100)];
    [_heroArray addObject:_heroLink];

    [self scheduleUpdate];
    }
}



-(void)update:(ccTime)delta{

    if (CGRectIntersectsRect([self.enemyLink.enemySprite boundingBox], [self.heroLink.heroSprite boundingBox])) {
        NSLog(@"rect intersects rect");  
    }

    for (CCSprite *enemies in self.enemies) {
        NSLog(@"enemy position: %f, %f",enemies.position.x,enemies.position.y);
    }
}

我无法在动作期间和之后检测到这两个精灵之间的碰撞。但是,如果我将Hero移动到场景中的位置(0,0),我的代码中的日志将会触发,并且两者将进行攻击。

更新中的for循环表示Enemy精灵位置在动作期间不断移动。因此,为什么我不知道为什么没有检测到碰撞。

1 个答案:

答案 0 :(得分:0)

您是否检查过敌人和英雄位置是否在同一坐标空间内进行了测试?

这是因为boundingBox()相对于父节点是本地的,如果您比较的节点没有相同的父节点,则检查将无效。

在检查边界框之前,您可以使用convertToNodeSpace()/ convertToWorldSpace()。

另一个可能与您的案例相关的答案:A sprite bounding box shows wrong position after moving the layer