正在做一个塔防游戏,怪物一直在动、塔不会动。
子弹打出去,到达目标位置后怪物早就跑掉的,这样效果很不好。
想实现子弹追踪目标但是效果一直都不太满意,来问问思路。
我说下我的思路。
1、注册一个定时器,每一帧更新目标位置,对子弹为坐标操作。
但是我想做一个抛物线效果,坐标操作不知道怎么实现抛物线
2、注册一个定时器,每一帧更新目标位置,获取上一次的action并停止action,更新目标位置重新注册一个action
但是感觉效果也不是很好,有没有大牛有更好的思路啊
思路2代码
void BombBullet::moveToAim(float dt){
//计数器,防止无限次执行action
if(m_moveCount >= m_moveMaxCount){
return;
}
//获取上一次的action
auto action = this->getActionByTag(BOMB_BULLET_MOVE_TO_AIM);
if(action != NULL){
this->stopAction(action);
}
//获取目标位置
Vec2 aimPos = this->getParent()->convertToNodeSpace(getAim()->getPosition());
Vec2 startPos = this->getPosition();
//这段请无视,贝塞尔曲线实现抛物线
Vec2 midPos = (aimPos+startPos)/2;
midPos.y += getCurBezierHight();
ccBezierConfig config;
config.controlPoint_1 = startPos;
config.controlPoint_2 = midPos;
config.endPosition = aimPos;
auto bezier = BezierTo::create(dt*2,config);
auto delay = DelayTime::create(dt);
auto callBack = CallFunc::create(CC_CALLBACK_0(BombBullet::moveEnd,this));
//重新注册action
auto seq = Sequence::create(bezier,delay,callBack,NULL);
seq->setTag(BOMB_BULLET_MOVE_TO_AIM);
this->runAction(seq);
m_moveCount++;
}
```
都没人吗?
感谢回答,如果这样做实现曲线运动会很麻烦吧。现在觉得计算未来的位置会比较靠谱