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