標準 MMORPG 中每個精靈佔據腳底一小區域,隨移動動態變化。實現動態障礙物構建是進軍戰鬥系統的前奏。
byte[,] FixedObstruction = new byte[1024, 1024], VaryObstruction;
FixedObstruction 即前章 Matrix,重新命名以利理解。
public int HoldWidth { get; set; } // 擴展寬度
public int HoldHeight { get; set; } // 擴展高度
以精靈腳底座標 (X,Y) 為中心擴展。本例 HoldWidth=1、HoldHeight=0,對應左數第二個精靈示意區域:

預測時必須排除自身佔據區域,以區域邊緣點取代原預測點。以向左移動為例:
private bool WillCollide()
{
switch ((int)Leader.Direction)
{
case 6:
return VaryObstruction[
(int)(Leader.X / GridSizeX) - Leader.HoldWidth - 1,
(int)(Leader.Y / GridSizeY)
] == 0 ? true : false;
}
}
黃色部分為新增擴展預測區域代碼。示意圖:

下一節將著手構建 VaryObstruction 動態陣列。