大家好有段时间没写博客了,最近比较忙,呵呵呵
一开始我认为一个×××类很是简单,就是调用cocos2d-x 中的moveto,moveby就能实现,运行起来发现敌人运行的过快的时候,×××moveto到敌人坐标,这是敌人已经走过了好几条街了。反复想了很多的办法,终于攻克了,大家有可能就笑了,博主太笨了吧,没错,新手就是这么笨,下面分享一下我的方法。
在update函数中加入如下代码:
- //定义一个当前×××坐标和一个敌人坐标
- CCPoint t_thisPoint,t_creepPoint;
- //如果目标被删除了则停止所有动作
- if (!sHWorld->_creepGroup->containsObject(_creep))
- delBullet();
- //负值
- t_creepPoint = _creep->getPosition();
- t_thisPoint= this->getPosition();
- //求两点的插值,其实就是两点的坐标想减
- delta = ccpSub(t_creepPoint,t_thisPoint);
- //求炮弹和敌人两点间的距离
- float t_Distance = ccpDistance(t_thisPoint,t_creepPoint);
- //计算行走后的点xy坐标
- float x = t_thisPoint.x +_BulletSpeed *delta.x /t_Distance;
- float y = t_thisPoint.y + _BulletSpeed *delta.y/t_Distance;
- //修改×××的位置
- this->setPosition(ccp(x,y));
再说说:
1-8行都是给炮弹坐标和敌人坐标负值。
9行事求这两点的插值,可以看看ccpsub是怎么定义的
- ccpSub(const CCPoint& v1, const CCPoint& v2)
- {
- return ccp(v1.x - v2.x, v1.y - v2.y);
- }
看到了吧,其实就是想减,得到的是两点x,y之间的差。
12行代码是求两点之间的距离
14-15 行代码就是用一个“平行线分线段成比例定理”求得x和y,大家可以看下
http://baike.baidu.com/view/947175.htm 这个网址就明白了,我就不贴了。
是不是很简单呢。
转载于:https://blog.51cto.com/farsa/1148834