cocos2d碰撞检测BOOL标志

时间:2013-08-13 09:10:45

标签: objective-c xcode cocos2d-iphone

我真的想让我的头部碰撞检测,这是我的游戏细节: 我有一个可以在屏幕周围自由移动并发射子弹的角色 敌人是在屏幕外生成的,“英雄”可以射击它们(当子弹和敌人被创建时,它们被存储在阵列中然后在碰撞中被移除) 目前,如果敌人与英雄接触,那么没有任何反应,我希望在接触时删除生命并相信这是通过碰撞检测来完成的。 我正在使用

(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标志?

2 个答案:

答案 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; }
 }