我正在制作一个游戏,我有我的英雄和敌人。现在我希望敌人跟随英雄,例如他们之间的距离是400。 我怎样才能让它发挥作用。 这是我到目前为止所做的,但它不起作用。 Objects :: calcAngle(Objects * obj) - 计算2个对象的中心点之间的角度。
float Objects::calcAngle(Objects* obj){
float dx = obj->X - this->X;
float dy = obj->Y - this->Y;
float angle=atan(dy/dx)*180/PI;
return angle;
}
void Enemy::Attack(mainCar* car){
float angle=0;
angle=this->calcAngle(car);
if(this->Distance(car)<400){
this->attack=true;
this->heading=this->calcAngle(car)+90;
this->Vtri=abs(this->Vtri);
} else if (this->Distance(car)>400) {
this->attack=false;
}
}
Vtri是移动速度。 标题是度数的方向。
如果你能给我一个链接到它描述的地方或者告诉我这里,那就太好了。我有2天的时间来提交我的项目。
答案 0 :(得分:2)
为了使对象从源点移动到目标点,您需要做一些事情:
<强>伪代码:强>
dy = PositionDestination.Y - PositionCurrent.Y
dx = PositionDestination.X - PositionCurrent.X
angle = atan2(dy/dx)
vx = v * cos(angle)
vy = v * sin(angle)
PositionCurrent += Vector(vx, vy)
<强> C#:强>
// angle is the arctan placed in the correct quadrant of the Y difference and X difference
float angleOfAttack =
(float)Math.Atan2((double)(PositionDestination.Y - PositionCurrent.Y),
(double)(PositionDestination.X - PositionCurrent.X));
// velocity is the cos(angle*speed), sin(angle*speed)
Vector2 velocity =
new Vector2((float)Math.Cos(angleOfAttack) * projectileMoveSpeed,
(float)Math.Sin(angleOfAttack) * projectileMoveSpeed);
// new position is +velocity
PositionCurrent += velocity;
因此,您首先根据源和目标坐标获得角度。然后,您可以根据角度和速度获得速度方向和距离。最后,根据速度矢量将当前位置移动到新位置。