小满(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