我真的想让我的头部碰撞检测,这是我的游戏细节: 我有一个可以在屏幕周围自由移动并发射子弹的角色 敌人是在屏幕外生成的,“英雄”可以射击它们(当子弹和敌人被创建时,它们被存储在阵列中然后在碰撞中被移除) 目前,如果敌人与英雄接触,那么没有任何反应,我希望在接触时删除生命并相信这是通过碰撞检测来完成的。 我正在使用
(CGRectIntersectsRect([hero boundingBox], [enemy boundingBox]))
但并非所有碰撞都被检测到,然后突然检测到3次。我相信这是因为当物体相互穿过时检测到多次碰撞。我曾试图使用BOOL标志,但我不相信我正确地做了,我的代码:
.h
BOOL collision;
.m
-(void)update:(ccTime)deltaTime {
if (collision == NO) {
if (CGRectIntersectsRect([hero boundingBox], [enemy boundingBox])) {
CCLOG(@”collision detected!!!!!!!!!!!!!!!!”);
collision = YES;
}
}
}
这是处理碰撞检测的最佳方法吗?如果是这样,你如何实现BOOL标志?
答案 0 :(得分:1)
你只是在碰撞时将布尔值设置为是,当你停止碰撞时将其设置为否,以便下次知道它是新的碰撞时。
if (CGRectIntersectsRect([hero boundingBox], [enemy boundingBox])) {
CCLOG(@”collision detected!!!!!!!!!!!!!!!!”);
if(!collision) {
// REMOVE LIFE
}
collision = YES;
}
else {
collision = NO;
}
答案 1 :(得分:0)
为敌方对象创建一个bool属性,并在敌人的init方法上设置为false。 当检测到冲突时,将其值设置为true,并在更新方法中检查以下内容:
if (enemy.isCollide)
{
if (!CGRectIntersectsRect([hero boundingBox], [enemy boundingBox]))
{
enemy.isCollide = No;
}
}
else
{
if (CGRectIntersectsRect([hero boundingBox], [enemy boundingBox])) {
enemy.isCollide = Yes; }
}