我正在製作一個類似於諸如魔獸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