2011-05-20 63 views
0

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

回答

1

为什么不在子弹源的相反图层上创建子弹,即层A是角色和敌人子弹,层B是敌人和角色子弹?那么你的碰撞检测将在同一层。

+0

@highlycaffeniated这听起来棒极了!但问题是,我不知道如何将子项添加到不是Layer类的不同类的图层中。 – ipodfreak0313 2011-05-21 04:09:20

0

查找到CGRectIntersectsRect ....我没有做过的Cocos2D很长一段时间,但我确实使用计划,定期调用它会检测使用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调用就可以检测碰撞。 :)

2


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

+0

我知道如何使用一层进行碰撞检测,但是如何使用多层进行碰撞检测? – ipodfreak0313 2011-05-21 04:08:16

+0

没问题。如果你想为敌人和子弹以及玩家和子弹使用两个不同的图层,你应该首先创建一个数据类,在那里你可以创建存储你需要的坐标的应用变量。在第一层i。e播放器层只是在Data类变量中传递所需的坐标。如果你在敌人的子弹层中检测到碰撞,只需使用包含敌方子弹坐标的数据类变量。玩家的子弹和敌人层也是如此。 – Nitish 2011-05-21 13:23:05

+0

只需看看[创建数据类](http://stackoverflow.com/questions/5798649/how-to-add-data-to-app-to-test-core-data-model/5800828#5800828) 。 – Nitish 2011-05-21 13:23:52

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"); 
}