我无法检测到两个精灵之间的碰撞,一个正在行动中。
我有一个类“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精灵位置在动作期间不断移动。因此,为什么我不知道为什么没有检测到碰撞。
答案 0 :(得分:0)
您是否检查过敌人和英雄位置是否在同一坐标空间内进行了测试?
这是因为boundingBox()相对于父节点是本地的,如果您比较的节点没有相同的父节点,则检查将无效。
在检查边界框之前,您可以使用convertToNodeSpace()/ convertToWorldSpace()。
另一个可能与您的案例相关的答案:A sprite bounding box shows wrong position after moving the layer。