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

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

編輯:關於C語言

很棒吧?嘿嘿。在角色屬性面板裡除了顯示角色的屬性值等個人資料外,還有裝備管理及屬性加點器兩個重要部分。關於裝備,後面的章節再細說。下面我向大家講講如何制作這個屬性加點器。

如果不論樣式,我們直接可以使用官方提供的NumericUpDown控件即可,該控件非常強大,看了它的源碼,其本身為一個組合控件,由4大部分組成:文本(TextBlock)、文本容器(ContentPresenter)、加按鈕(RepeatButton)及減按鈕(RepeatButton),且模式很多,你能想到的基本都有。當然同樣的,要重寫它的樣式實在是麻煩之事,其實該控件的重點就就在RepeatButton上,如何實現這個Repeat動作又是關鍵中的關鍵。我們不妨從它的原理出發,當鼠標在此按鈕上按下時開始計時,如果鼠標一直未放開,則當到達預先設定的Delay時間間隔後即觸發後面的連續重復動作,且這些動作以Interval為間隔不斷重復下去直到鼠標左鍵被放開或鼠標離開該控件。此時,我又想到了美麗的QXIcon,再次為它添加一種新模式:IconTypes.RepeatButton:

case IconTypes.RepeatButton:
DispatcherTimer timer = new DispatcherTimer();
  timer.Tick += (s, e) => { timer.Interval = TimeSpan.FromMilliseconds(Interval); RepeatClick(this, e); };
  this.MouseEnter += (s, e) => { Container.Background = NewSource; };
  this.MouseLeave += (s, e) => { Container.Background = _BodySource; timer.Stop(); };
  this.MouseLeftButtonDown += (s, e) => { timer.Interval = TimeSpan.FromMilliseconds(Delay); timer.Start(); };
  this.MouseLeftButtonUp += (s, e) => { timer.Stop(); e.Handled = true; };
break;

根據前面對RepeatButton工作原理的描述,在這種模式下,我通過創建一個DispatcherTimer,當它Tick時觸發public event EventHandler RepeatClick;事件。其中配合控件自身的 MouseLeftButtonDown、MouseLeftButtonUp及MouseLeave來開停Timer及設置它的間隔。

接著,我們就可以將此控件應用到主角屬性面板中制作屬性加點器了。配合上相應邏輯,當屬性點數加完並提交後,主角的新屬性值會立即更新反映到界面中。按照第二十八節的屬性設置,主角擁有5大基本屬性,當修改這些屬性時會分別影響相關的值數據。例如,默認情況下主角的智慧為30,魔法攻擊基本傷害范圍為460-615(不包括魔法自身的攻擊力),此時用激光魔法攻擊敵人可造成約600左右傷血:

而當我將智慧加到200並點擊確定後,魔法攻擊到了3010-4015,此時攻擊敵人可以造成3500左右的傷害,很酷吧。嘿嘿:

本教程示例游戲中,我為主角賦予了1000點的潛能點,大家可以自由分配到不同的屬性上,例如增加力量屬性可以增加物理攻擊力,增加體格可以提升血上限及防御等,增加敏捷可以加快移動及施法速度等,增加幸運可以提高暴擊率等等,測試起來還是相當有趣的呢~

不過目前的屬性加點器還不能通用,畢竟不同的游戲中加點器的實現都有差異。例如有些只有加沒有減,每次點擊都會直接提交,這種處理最簡單;而有的每次加點都會直接反應到界面上,且中途如果不滿意取消後又會恢復原樣,這種模式做起來相對復雜些,需要一些臨時字段來存儲數據,只有提交後才更新到服務器。本節功能上我選擇了折中的處理方式。

游戲中的面板基本上大同小異,前面章節中的對象監視面板、雷達地圖面板、尋路地圖面板、主角屬性面板的制作基本上含蓋了大多數情況,後面的章節我將不再圍繞面板這個羅嗦的話題了,打算將重心放到裝備、物品、技能存放與拖動的實現方面,敬請關注。

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