int length=0;
float index=0;
for (int i=0; i<Game::allEnemy.size(); i++) {
auto nowEmeny=Game::allEnemy.at(i);
if (length==0) {
length=this->getPosition().distance(nowEmeny->getPosition());
}else
{
if (this->getPosition().distance(nowEmeny->getPosition())<length) {
length=this->getPosition().distance(nowEmeny->getPosition());
index=i;
}
}
}
另外,Cocos2d-x中规定顺时针方向为正,这显然与我们计算出的角度方向相反,所以转化的时候需要把角
rotateDuration表示旋转特定的角度需要的时间,计算它用弧度乘以速度
Vec2 rotateVector=Game::allEnemy.at(index)->getPosition()-this->getPosition();
float rotateRadians=rotateVector.getAngle();
float rotateDegrees=CC_RADIANS_TO_DEGREES(-1 *rotateRadians);
// this->ang=rotateDegrees;
float speed=0.5/M_PI;
float rotateDuration=fabs(rotateRadians *speed);
rotateArrow->runAction(Sequence::create(
RotateTo::create(rotateDuration, rotateDegrees),
CallFunc::create(CC_CALLBACK_0(TD::shoot, this)), NULL));
}
最后在创建游戏塔的同时定义一个计划函数:
newtd->schedule(schedule_selector(TD::roateAndShoot),0.5);
本文探讨了如何在游戏塔防御中检测炮塔视线范围内距离最近的敌人,并通过计算角度和旋转时间实现自动瞄准。利用Cocos2d-x引擎的特性,通过遍历所有敌人,计算与炮塔的距离,找到最近的敌人。接着,运用几何原理计算出与X轴之间的角度关系,通过弧度到角度的转换和正负判断调整射击方向。最后,通过设定旋转速度和计算旋转时间,实现在合适的时间内准确瞄准并发射箭矢。
4290

被折叠的 条评论
为什么被折叠?



