cocos2d-x游戏实例(27)-简易动作游戏(5)

小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man

继续简易动作游戏实例,本篇加入小怪并且加入小怪与主角的碰撞检测,效果如下:

cocos2d-x游戏实例(27)-简易动作游戏(5)_第1张图片

首先在场景的初始化函数中加入小怪的精灵,并设置位置与锚点:

enemy = CCSprite::spriteWithFile("SpinningPeas.png");

map->addChild(enemy, map->getChildren()->count() );

enemy->setPositionInPixels(ccp(winSize.width/2 + 80,32));

enemy->setAnchorPoint(ccp(0.5f,0));

下面是小怪的逻辑,就是左右移动,逻辑代码如下:

cocos2d-x游戏实例(27)-简易动作游戏(5)_第2张图片

就是用一个简单的计步变量enemymovetick,并根据这个值给每帧的移动步长。

为了使碰撞检测精准,我自定义了主角与怪的宽高,也加到init函数中:

ownsize = CCSizeMake(40,100);

othersize = CCSizeMake(32,32);

下面来看碰撞检测函数:

cocos2d-x游戏实例(27)-简易动作游戏(5)_第3张图片

在函数根据两个精灵的位置,以及之前设置的宽度,来检测碰撞,两个精灵的锚点都在脚底,锚点的横坐标之差的绝对值小于宽度一半差的和,纵坐标的差(主角纵坐标减去小怪纵坐标只差)小于小怪的高,大于主角高乘以-1,也就是小怪和主角的相对位置如下:

小怪比这位置高(小矩形为小怪):

cocos2d-x游戏实例(27)-简易动作游戏(5)_第4张图片

小怪比这位置低:

cocos2d-x游戏实例(27)-简易动作游戏(5)_第5张图片

也就是要在这个范围内:

cocos2d-x游戏实例(27)-简易动作游戏(5)_第6张图片

update函数中调用检测函数,并且处理碰撞:

首先为主角加入受伤动作,然后将isreduce标志为true,也就是在受伤后5秒内不再检测碰撞,然后用schedule函数在5秒后将isreduce置回false。并将水平速度设置为0

如有错误之处,希望大家多多指正

下一篇继续简易动作游戏实例



你可能感兴趣的:(游戏)