衝突検出に問題があります (box2D や Chipmunk ではなく、cocos2d を使用しています)。基本的に、私はCCSprite であるPlayerと、同じく CCSprite であるProjectilesを持っています。これまでのところ、CGRectIntersectRect を使用してすべてが正常に機能していますが、ゲームでは、プレイヤーは常にプレイヤーの前にあるスーパー レーザー オブ ドゥームを起動できます。私がそれを含めた方法は、それをplayerの子として追加することなので、回転や移動などについて行うコードはもうありません。しかし、私が抱えている問題は、レーザーの位置がシーンではなくプレーヤーに追加されるため、レーザーの位置が常に 0,0 であるため、発射物との衝突を正しく検出しないことです。
これが私のコードです:
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];
}
私は何に焦点を当てるべきだと思いますか?衝突を検出する簡単な方法はありますか、それともシーンにレーザーを追加し、プレイヤーと一緒に動かすコードを追加する必要がありますか?
ご回答誠にありがとうございました!