Cocos2d中各层之间的碰撞检测?

时间:2011-05-20 18:59:05

标签: iphone xcode cocos2d-iphone

我在Cocos2d制作游戏。我有射击的敌人,并有角色射击。我为敌人(及其子弹)创建了一个单独的图层,并为角色(及其子弹)创建了一个单独的图层。问题是,我不知道如何检测两层之间的碰撞。注意,我在HelloWorldLayer中有Scene,并且上面的每个层都是场景的子节点。任何帮助表示赞赏。谢谢!

4 个答案:

答案 0 :(得分:4)

如果使用花栗鼠

,则需要添加以下行
shape->collision_type  = kCollisionTypeParticle;  
cpSpaceAddCollisionHandler(space_, 
                           kCollisionTypeParticle, 
                           kCollisionTypeParticle, 
                           collisonDetect, 
                           NULL, 
                           NULL, 
                           NULL, 
                           self);

这里collisonDetect是我们需要注册的方法:

cpBool collisonDetect(cpArbiter *arb, struct cpSpace *space, void *data) 
{
   <YOUR CLASS> *layer = (<YOUR CLASS> *)data;
   [layer collisonDetect:arb];
   return cpTrue;
}

现在,您将在这里处理其余代码

-(void)collisonDetect:(cpArbiter*)arb
{
   NSLog(@"COLLISION DETECTED");
}

答案 1 :(得分:2)


您可以使用 CGRectIntersectsRect 检测 Cocos2D 中的碰撞。
关于为敌人和子弹创建单独图层的想法可能会让人感到困惑。在这种情况下,您应该考虑使用一个图层。您一定要查看碰撞检测的 Ray Wenderlich 。如果没有查看Simple Cocos2d game 如果您需要更多帮助,请告诉我。

答案 2 :(得分:1)

为什么不在子弹源的对面创建子弹,即A层是角色和敌人子弹,B层是敌人和角色子弹?然后你的碰撞检测将在同一层。

答案 3 :(得分:0)

查看CGRectIntersectsRect ....我没有在很长一段时间内完成Cocos2D,但我确实记得使用Scheduler定期调用一个方法来检测使用CGRectIntersectsRect方法的冲突......

我在屏幕上只有有限数量的精灵,在碰撞检测方法的每一次传递中,我都会检查我的敌人精灵帧是否与我的主角的帧相交CGRectIntersectsRect

我就这样做了:

第1步: 实现一个使用CGRectIntersectsRect来检查精灵帧是否正在触摸的方法。它可能看起来像:

- (BOOL)detectCollision
{
    CGRect frame1 = someframe;
    CGRect frame2 = anotherframe;

    if(CGRectIntersectsRect(frame1, frame2))
        return YES;
    else
        return NO;
}

使用以下方法实现Scheduler每秒调用一次碰撞检测方法:

[self schedule: @selector(detectCollision) interval:0.25];

这种方式在你的游戏中每次调用collisionDetect方法时都可以检测到碰撞。 :)