【Cocosd2d实例教程八】Cocos2d实现碰撞检测(含实例)

(转载请注明出处:http://blog.csdn.net/buptgshengod

1.介绍

      说到碰撞检测,最简单直观的例子就是超级玛丽里的吃金币功能,当两个物体碰撞在一起产生一定的效果。下面上图介绍下这章的实例。当机器人a走到机器人b的身上时,机器人b消失。
【Cocosd2d实例教程八】Cocos2d实现碰撞检测(含实例)_第1张图片【Cocosd2d实例教程八】Cocos2d实现碰撞检测(含实例)_第2张图片

2.具体实现方式

    其实思路很简单,就是规定每个精灵有他们自己的一个作用范围,当两个精灵的作用范围重叠时,一个精灵的不可见就可以了。
     关于摇杆器控制精灵移动这些在前面的章节讲过了,就不多说。
     首先在HelloWorldLayer.h中定义精灵。
 CCSprite  *player;//机器人a
 CCSprite  *enemy;//机器人b
     打开 HelloWorldLayer.m。在init中改变代码
-(id) init
{
	// always call "super" init
	// Apple recommends to re-assign "self" with the "super's" return value
	if( (self=[super init]) ) {
        //get screen's size
	CGSize winSize = [[CCDirector sharedDirector] winSize];//获得屏幕大小
        //机器人b
        enemy = [CCSprite spriteWithFile:@"2.png"];
        enemy.position = CGPointMake(winSize.width / 2+120,winSize.height/2);
        [self addChild:enemy z:1];
       //机器人a
        player = [CCSprite spriteWithFile:@"1.png"];
        player.position = CGPointMake(winSize.width / 2-50,winSize.height/2);
        [self addChild:player z:1];
        self.isTouchEnabled = YES;
        [self initJoystick];//遥感器
        [self scheduleUpdate];//启动定时刷新

	}
	return self;
}
       加入摇杆控制函数,这里不多说了。
       下面是关键的碰撞检测代码。
-(void) update:(ccTime)dt{
    
    [self collisionDetection:dt];//刷新下面定义的函数
}

//确定可碰撞范围,作用域。CGRectMake四个参数意义:前两个相对于左上角的x,y轴位置确定一个矩形,后两个是举行的长和宽
-(CGRect) rectOfSprite:(CCSprite*)sprite{
    return CGRectMake(sprite.position.x - sprite.contentSize.width / 2,
                      sprite.position.y - sprite.contentSize.height /2,
                      sprite.contentSize.width, sprite.contentSize.height);
}
//碰撞方法
-(void) collisionDetection:(ccTime)dt{
    
    //2.enemy & player collision detection
    CGRect enemyRect = [self rectOfSprite:enemy];
    CGRect playRect = [self rectOfSprite:player];
    if (enemy.visible&& CGRectIntersectsRect(enemyRect, playRect)) {
        enemy.visible = NO;//机器人b消失
        [self unscheduleUpdate];//停止刷新
    }
    
}


源代码下载地址
  

你可能感兴趣的:(cocos2d,实例,碰撞检测)