我正在制作一个类似于诸如魔兽1/2/3等战略游戏的移动的服务器/客户端游戏,其中玩家通过右键点击该区域的某处并且尝试移动搬到那里。我试图让角色总是直线前进,直到它到达那里(或足够近)。我现在使用的代码在那里得到了角色,但是以一种奇怪的方式。基于鼠标点击的移动XNA
当我点击字符下方的某个位置(Y坐标较高)时,它会沿直线移动,但当我点击它上方(Y坐标较低)时,角色会像移动时形成一个圆圈一样移动,但仍然会那里,只有我不希望它的方式。
下面是运行每个更新以移动它的代码。
if (this.order == "Move")
{
if (Math.Abs(this.orderPos.X - this.warlockPos.X) < this.moveSpeed && Math.Abs(this.orderPos.Y - this.warlockPos.Y) < this.moveSpeed)
{
this.warlockPos = this.orderPos;
this.order = "None";
this.orderPos = Vector2.Zero;
}
else
{
delta = this.orderPos - this.warlockPos;
if (delta.Y == 0)
{
if (delta.X < 0)
angle = -90;
else
angle = 90;
}
else
{
if (delta.Y < 0)
angle = 180 + Math.Atan(delta.X/delta.Y);
else
angle = Math.Atan(delta.X/delta.Y); ;
}
this.warlockPos = new Vector2(this.warlockPos.X + this.moveSpeed * (float)Math.Sin(angle), this.warlockPos.Y + this.moveSpeed * (float)Math.Cos(angle));
}
}
this.order ==移动表示客户端的最后一个订单是移动。 orderPos是客户最后告诉角色应该移动的服务器的地方。 warlockPos是角色的当前位置(在上一次更新结束时的位置)。 moveSpeed就是它移动的速度。 我使用增量和角度来确定角色在此更新中移动的位置。
那么,当角色移动的角度超过角色时,角色以循环方式移动的原因是什么?
谢谢你,完美的工作:D!顺便说一下,我不得不补充这一点。到一切,但那是因为代码是在一个类内的函数内部,所以有参数。 – RontoKing 2015-01-04 12:25:14
没问题!啊,可以理解。快乐的XNAing! – Ideae 2015-01-04 12:27:59
对不起,您能不能帮我解决一些问题(这段代码完美地工作)?如何计算术士在被附近术士击倒时会被击倒的位置(矢量2)。因此,如果A点靠近B点,B点使A点远离自身,那么点A会移动到什么点? (我知道如何让它移动到这一点,这要感谢你已经给我的代码,但我不知道如何找到那个点) – RontoKing 2015-01-05 23:24:27