簡體   English   中英

用於基於網格的運動的多維數組

[英]Multidimensional Array For Grid Based Movement

我正在使用Unity3D練習編程技能。 我有一個網格設置,其中的坐標以x,y類型設置。

[0,0] to [10,10]

介於所有數字之間(即IE 5,5將接近地圖中心)。

我現在要做的是找出一個數學公式來計算角色可以移動的坐標。 如果角色在位置5,5處並且移動半徑為2,那么返回該角色可以移動到的列表或坐標數組的最有效方法是什么? 每個單獨的網格正方形都是其自己的對象,並且具有針對其X和Y的公共變量,因此一旦獲得可用結果,在代碼中實際使用它們就不難了。

到目前為止,這是我正在嘗試的操作(我現在暫時忽略了超出范圍的可能性,這很容易解決):

for(int x = currentGridSquare.xCoord - myMovementRange; 
x <= currentGridSquare.xCoord + myMovementRange; x++){
for(int y = currentGridSquare.yCoord - myMovementRange;
    y <= currentGridSquare + myMovementRange; y++)
{
    //Starting at 5,5 with a movement range of 2 should
    //start this process at the value of 3,3 which
    // is incorrect
}
}

我可能不願意為這個計算一個公式,但是我一直在搜索並且沒有發現任何東西,因此,如果有人對此有經驗並知道一種快速的實現方法,我將不勝感激。

更新:我期望這將返回的值是坐標。 在此示例中,從5,5開始,我想要返回的值將為[3,5],[4,4],[4,5],[4,6],[3,5],[4 ,5],[5,5],[6,5],[4,6],[5,6],[6,6]和[5,7]

因此,我使用了Ben提供的公式並得出:

foreach(var gridSquare in allGridSquares)
{
   if( (Mathf.Abs(myX - gridSquare.Xcoord) + (Mathf.Abs(myY - gridSquare.Ycoor) >= myMovementValue)
   {
        gridSquare.activate();
   }

}

我知道,如果網格開始變大,則距離公式會變得更加復雜,如果是這種情況,我將在稍后進行更新,但是對於我的網格大小而言,它的工作效果非常好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM