詳細記錄迷你雷達地圖的初始化載入、縮放按鈕實現,以及物件呈現的核心邏輯與方案選型心得。
private void LoadMiniMap() {
if (miniMap == null) return;
miniMap.MiniMap.Children.Add(new Image() {
Name = "MiniMapImage",
IsHitTestVisible = false,
Stretch = Stretch.Fill,
Source = Super.GetImage(string.Format("/Image/Map/{0}/MiniMap/0.jpg", mapCode)),
});
miniMap.VSName = "一區[亞特蘭蒂斯]";
miniMap.VMapName = Super.Settings[mapData].Attribute("Name").Value;
miniMap.MapOriginalWidth = mapWidth;
miniMap.MapOriginalHeight = mapHeight;
miniMap.Scaling = (double)Super.Settings[mapData].Element("MiniMap").Attribute("Scaling");
miniMap.MinScaling = (int)Super.Settings[mapData].Element("MiniMap").Attribute("MinScaling");
miniMap.MaxScaling = (int)Super.Settings[mapData].Element("MiniMap").Attribute("MaxScaling");
}
private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
if (e.OriginalSource == Telescopic) {
// 伸縮按鈕邏輯
} else if (e.OriginalSource == Narrow) {
if (Scaling > MinScaling) Scaling -= 1;
} else if (e.OriginalSource == Zoom) {
if (Scaling < MaxScaling) Scaling += 1;
}
e.Handled = true;
}
嘗試過的替代方案與放棄原因:
| 方案 | 缺點 |
|---|---|
| 動態載入區域縮圖 | 瞬間效能消耗極大 |
| WriteableBitmap 合成全圖再縮放 | 需預先下載所有地圖圖片,違背按需下載原則 |
| 其他兩種方案 | 更不科學,不再贅述 |
最終方案:預先製作統一尺寸 (600×450) 的等比縮圖,配合縮放參數動態調整。優點:效能高、資源少、可同時支援雷達地圖與尋路地圖雙系統複用。
雷達物件移動邏輯與主遊戲地圖「托盤式」移動本質相同。參考下圖理解座標映射關係: