经过这两天研究取得了点成果;当僵尸到达植物枪得攻击范围内,植物枪旋转枪口攻击僵尸,现在摆在眼前的问题是如何动态检测植物枪和僵尸之间的距离问题?

cocos2d-x 植物大战僵尸(四)到达植物枪得攻击范围内,植物枪旋转枪口攻击僵尸...

cocos2d-x 植物大战僵尸(四)到达植物枪得攻击范围内,植物枪旋转枪口攻击僵尸...


开始我走了弯路,因为植物枪一旦放置后位置就不会在发生改变,所以我就想用过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 ,可以留言给我。。



相关文章:

  • 2021-12-05
  • 2021-08-18
  • 2021-09-07
  • 2021-11-25
  • 2021-08-14
  • 2022-12-23
猜你喜欢
  • 2021-11-11
  • 2021-09-22
  • 2021-04-25
  • 2021-11-03
  • 2021-08-01
  • 2021-08-29
  • 2021-12-30
相关资源
相似解决方案