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

前端之家收集整理的这篇文章主要介绍了cocos2d-x游戏实例(27)-简易动作游戏(5)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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


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

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));

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


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

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

ownsize=CCSizeMake(40,100);

othersize=CCSizeMake(32,32);

下面来看碰撞检测函数


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

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


小怪比这位置低:


也就是要在这个范围内:


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

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

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

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

原文链接:https://www.f2er.com/cocos2dx/342244.html

猜你在找的Cocos2d-x相关文章