程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#開發WPF/Silverlight動畫及游戲系列教程(Game Tutorial):(四十一)(2)

C#開發WPF/Silverlight動畫及游戲系列教程(Game Tutorial):(四十一)(2)

編輯:關於C語言

第三步,在游戲地圖初始化完後加載它及相關參數:

private void LoadMiniMap() {
if (miniMap == null) { return; }
//加載mini地圖
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, System.Windows.Input.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;
}

通過以上步驟,我們即可輕松的實現Mini雷達地圖的縮放功能。這裡我也想說說我曾經嘗試過的其他方案,例如根據主角當前位置加載一定數量縮小後的地圖圖片到Mini雷達地圖窗口中,但此方法瞬間性能消耗很大;還比如在地圖初始化時通過WriteableBitmap將所有地圖圖片合成為一張整圖再按比例縮小,此方法理論上可行,但是將導致一開始必須將所有地圖片全部下載下來,此方法與本引擎地圖片按需下載的原理相違背。同時我還測試過其他兩種更不科學的方案,具體就不說了。因此,最終我選擇了本文上述講解的方案,不僅性能高,消耗的資源少,而且可以被Mini雷達地圖與Mini尋路地圖所共用,算是個人感覺比較完美的方案了。

3)對象及參數呈現功能。本文開頭曾說過,該Mini雷達地圖的呈現原理其實與主角在游戲地圖中移動原理幾乎一樣,這又該如何理解呢?我們先看下圖:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved