经过这两天研究取得了点成果;当僵尸到达植物枪得攻击范围内,植物枪旋转枪口攻击僵尸,现在摆在眼前的问题是如何动态检测植物枪和僵尸之间的距离问题?
开始我走了弯路,因为植物枪一旦放置后位置就不会在发生改变,所以我就想用过update()更新/监听僵尸坐标的方法来实现动态获取两者之间距离的方法,可惜失败了;问题我也不是很清楚,结果就是一闪而过,僵尸消失了;当然这不是我要讲的重点;重点是我的另外一种方法;
使用boundingBox()来检测植物枪和僵尸之间的距离问题;我们应该还记得碰撞检测吧,我要说的意思是:在每个精灵外面其实都有一个boundingBox()这个boundingbox()会随精灵一起运动,并始终保持在精灵的外面,它的坐标是动态变化的,,所以与其检测植物枪和僵尸的距离不如检测两个boundingBox()的距离;
下面来解释下几个系统函数的用法:
void GameLayer::checkJs()
{
//获取两个精灵的boundingbox的最外层坐标,并求两者之间距离的绝对值
if( fabs(ccpDistance(ccp(this->_plantSprite->boundingBox().getMaxX(),this->_plantSprite->boundingBox().getMaxY()),ccp(this->_maoJsSprite->boundingBox().getMaxX(),this->_maoJsSprite->boundingBox().getMaxY())))<150) //如果这两个精灵距离的绝对值小与150,则表示僵尸进入了植物枪的攻击范围,植物枪就要移动枪口攻击僵尸
{
this->R =R+0.1; //声明一个float R;初始值为0;
this->_plantSprite->setRotationY(this->R-7); //这里的7是需要根据实际情况来控制的,要在视觉上让人感觉 到植物枪在跟踪着僵尸,当僵尸移动出150的圆形区域后植物枪停止旋转;
}
}
我们可以利用这个原理做很多事情,比如放置一只狗来回游走,方发现僵尸后,,就跑过去咬他。。嘿嘿
当然部分代码我觉得还有些问题,暂时就不往这里写了。。我只是说下我个人对待这些问题的思路。您要是有更好的ideas ,可以留言给我。。