2) 改進「托盤式」主位地圖移動模式
感謝「內Cool超人」點醒:主角與所有物件可放同一 Canvas,ZIndex 照常處理,實現托盤式移動。畫面效能無提升,但配合 Coordinate 相依性屬性回調,可去除遍歷所有物件位置迴圈,邏輯效能大幅提升。
3) 隱藏遠離視窗的精靈物件
Web 遊戲必須處理,大幅減少不必要呈現與運算:
if ((Math.Abs(sprite.Coordinate.X - Leader.Coordinate.X) > this.ActualWidth / 2) || (Math.Abs(sprite.Coordinate.Y - Leader.Coordinate.Y) > this.ActualHeight / 2))
{
sprite.Visibility = Visibility.Collapsed;
sprite.Timer.Stop();
}
else
{
if (!sprite.Timer.IsEnabled) { sprite.Visibility = Visibility.Visible; sprite.Timer.Start(); }
}
輔助計時器 0.5 秒間隔判斷,超出可視範圍隱藏並停止切幀,否則恢復。對整體效能決定性關鍵。網遊可擴展二級範圍:一級為可視範圍,二級更遠則移除釋放資源。

4) 改進即時障礙物系統
兩障礙物陣列 (0-255,0 障礙,非 0 可通。1 標識無物體可通區,10-19 標識傳送點。可擴展:20 水域、21 沙漠等,移動播對應腳步聲更逼真)。A* 移動時先去除精靈腳底障礙區 (HoldWidth/HoldHeight),啟動尋路,找到路徑後補回:
SetSpriteObstruction(sprite, 1);
AStarMove(sprite, GetSpriteEdge(enemy));
sprite.UseAStarMove = true;
SetSpriteObstruction(sprite, 0);
SetSpriteObstruction 實作:
private void SetSpriteObstruction(QXSprite sprite, byte sign)
{
int x = (int)(sprite.Coordinate.X / gridSizeX);
int y = (int)(sprite.Coordinate.Y / gridSizeY);
for (int m = x - sprite.HoldWidth; m <= x + sprite.HoldWidth; m++)
for (int n = y - sprite.HoldHeight; n <= y + sprite.HoldHeight; n++)
if (fixedObstruction[m, n] != 0) varyObstruction[m, n] = sign;
}
僅在固定障礙非 0 處標記動態值,避免覆蓋地形資訊。