大家好有段时间没写博客了,最近比较忙,呵呵呵

一开始我认为一个×××类很是简单,就是调用cocos2d-x 中的moveto,moveby就能实现,运行起来发现敌人运行的过快的时候,×××moveto到敌人坐标,这是敌人已经走过了好几条街了。反复想了很多的办法,终于攻克了,大家有可能就笑了,博主太笨了吧,没错,新手就是这么笨,下面分享一下我的方法。

 在update函数中加入如下代码:

 
  
  1. //定义一个当前×××坐标和一个敌人坐标 
  2.     CCPoint t_thisPoint,t_creepPoint; 
  3.     //如果目标被删除了则停止所有动作 
  4.     if (!sHWorld->_creepGroup->containsObject(_creep))  
  5.         delBullet(); 
  6.     //负值 
  7.     t_creepPoint = _creep->getPosition(); 
  8.     t_thisPoint= this->getPosition(); 
  9. //求两点的插值,其实就是两点的坐标想减
  10.     delta = ccpSub(t_creepPoint,t_thisPoint); 
  11.     //求炮弹和敌人两点间的距离 
  12.     float t_Distance = ccpDistance(t_thisPoint,t_creepPoint); 
  13.     //计算行走后的点xy坐标 
  14.     float x = t_thisPoint.x +_BulletSpeed *delta.x /t_Distance; 
  15.     float y = t_thisPoint.y + _BulletSpeed *delta.y/t_Distance; 
  16.     //修改×××的位置 
  17.     this->setPosition(ccp(x,y)); 

再说说:

1-8行都是给炮弹坐标和敌人坐标负值。

9行事求这两点的插值,可以看看ccpsub是怎么定义的

 
  
  1. ccpSub(const CCPoint& v1, const CCPoint& v2)  
  2. {  
  3.     return ccp(v1.x - v2.x, v1.y - v2.y);  

看到了吧,其实就是想减,得到的是两点x,y之间的差。

12行代码是求两点之间的距离

14-15 行代码就是用一个“平行线分线段成比例定理”求得x和y,大家可以看下

http://baike.baidu.com/view/947175.htm 这个网址就明白了,我就不贴了。

是不是很简单呢。