Cocos2D简单碰撞检测一个精灵,另一个精灵的子女
我在碰撞检测中遇到问题(我正在使用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];
}
那你觉得我应该集中上?有没有一种简单的方法来检测碰撞,还是应该在场景中添加激光并添加代码以使其随播放器一起移动?
非常感谢您的回答!
你可以尝试一些事情:
从现场播放的convertToWorldSpace
和
convertToNodeSpace
发挥
-
把激光在现场,当您移动播放器还移动激光
-
您可以发送激光给玩家和覆盖方法
setPosition()
在玩家-(void) setPosition(CGPoint newPos){ [laser setPosition:newPos]; [super setPosition:newPos]; }
这里,每次当您移动播放器(CCMoveTo,CCMoveBy等)激光器的举动太花时间。
- 另一种选择是,当您移动播放器发送相同的动作,以激光
-
使用CCNode方法convertToWorldSpace:
将抛射体的边界框位置(原点)转换为世界空间坐标。这会转换坐标,就像投射物被添加到场景中一样,即位置相对于屏幕坐标0,0变化。
不工作:(我的激光器是这样的:Ω0> - ==== ===== 其中:O是屏幕的中心,o>是播放器, - 是激光的锚点,=======是激光。是否convertToWorldSpace旋转了精灵考虑如何? – RaphBlanchet 2013-03-20 18:26:09
@ LearnCocos2d如果父母轮换,但孩子的精灵位置从未改变,那么该怎么办? – 2016-08-09 05:35:27
我跟着你的第二个选择,它像一个魅力工作,非常感谢你! :d – RaphBlanchet 2013-03-24 07:24:34