【发布时间】:2011-01-19 11:55:38
【问题描述】:
我正在设计一个使用 40 个 CCSprite 对象的游戏。我需要检测它们之间的碰撞。我能够检测到 2 个精灵之间的碰撞。现在我如何检查 1 个对象与所有剩余对象?使用 FOR 循环会起作用吗?还是有其他方法可以做到这一点?
【问题讨论】:
标签: cocos2d-iphone collision-detection
我正在设计一个使用 40 个 CCSprite 对象的游戏。我需要检测它们之间的碰撞。我能够检测到 2 个精灵之间的碰撞。现在我如何检查 1 个对象与所有剩余对象?使用 FOR 循环会起作用吗?还是有其他方法可以做到这一点?
【问题讨论】:
标签: cocos2d-iphone collision-detection
我认为对于第一次迭代,你应该实现 for 循环,看看它是否足够快。
如果不是,我想您可以将您的游戏区域划分为矩形并将您的对象分布到矩形(与多个矩形重叠的对象属于所有矩形)。然后,当您进行碰撞时,您只能检查放置初始对象的矩形。当然,这在很大程度上取决于你在那里拥有什么。如果所有物体都经常移动,那么它可能不是一个热门的想法。
【讨论】:
你为什么不使用 Box2D 或花栗鼠
对于 Box2D,link 会有所帮助。
对于 Cocos2D,以下代码会有所帮助。
您需要添加以下几行
shape->collision_type = kCollisionTypeParticle;
cpSpaceAddCollisionHandler(space_, kCollisionTypeParticle, kCollisionTypeParticle, collisonDetect, NULL, NULL, NULL, self);
这里collisonDetect是我们需要注册为的方法:
cpBool collisonDetect(cpArbiter *arb, struct cpSpace *space, void *data) {
*层 = ( *) 数据;
[层 collisonDetect:arb];
返回 cpTrue;
}
现在在这里你将处理其余的代码
-(void)collisonDetect:(cpArbiter*)arb {
NSLog(@"检测到碰撞");
}
【讨论】: