У меня проблема с обнаружением столкновения (я использую cocos2d, а не box2D или Chipmunk). В принципе у меня есть Игрок, который является CCSprite, и Снаряды, также CCSprite. До сих пор все работает отлично, используя CGRectIntersectRect, но в игре игрок может активировать супер-лазер гибели, который всегда находится перед игроком. То, как я включил это, заключается в том, что я добавляю его как ребенок игрока, поэтому у меня нет никакого кода для работы с такими вещами, как вращение или перемещение. Но проблема в том, что она не обнаруживает столкновения с снарядами правильно, так как положение лазера всегда равно 0,0, потому что оно добавлено к игроку, а не к сцене.Cocos2D Простой столкновение Обнаружение спрайта, дети другого спрайта
Вот мой код:
Player.m
- (bool) activateSuper{
bool activated = NO;
if (powerReady) {
NSLog(@"Super Activated!!!!!");
activated = YES;
_state = pSuper;
//Super sprite which is supposed to collide with projectiles
_sprSuper = [CCSprite spriteWithSpriteFrameName:@"Laser.png"];
_sprSuper.anchorPoint = ccp(0.5, 0.0);
_sprSuper.position = ccp(self.contentSize.width/2, self.contentSize.height);
[self addChild:_sprSuper];
//Delete
int duration = 5;
[self runAction:[CCSequence actionOne:[CCDelayTime actionWithDuration:duration]
two:[CCCallBlock actionWithBlock:^{
[self removeChild:_sprSuper cleanup:YES];
powerReady = NO;
curSuper = 0;
_state = pOK;
}]]];
//Empty super bar
GameScene *g = (GameScene*)[self parent];
[g.gameHUD emptyBar:duration];
}
return activated;
}
В GameScene.m (для обнаружения коллизий):
- (void) update:(ccTime)dt{
Projectile *pToRemove = nil;
for (Projectile *p in projectiles){
if (player.state == pSuper && CGRectIntersectsRect(p.boundingBox, player.sprSuper.boundingBox)) {
pToRemove = p;
break;
}
}
if (pToRemove != nil) [self destroyProjectile:pToRemove];
}
Что вы думаете, я должен сосредоточиться на? Есть ли простой способ обнаружения столкновения, или я должен добавить Лазер в сцену и добавить код, чтобы заставить его двигаться вместе с игроком?
Спасибо вам большое за ваш ответ!
Я следил за вашим вторым вариантом, и это сработало как шарм, спасибо вам очень много! : D – RaphBlanchet