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

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

編輯:關於C語言

相對於上一節,氣勢增加了不少呢,對嗎?

額外的,通常的網絡游戲中,我們都可以通過角色頭像面板中的小圖標來查看當前監視的精靈對象被附加的Buff以及相關信息如持續時間、效果等等,而這個功能在我們的示例游戲中該如何實現呢?

這裡我們同樣的先添加一個名為QXIcon的圖標控件,該控件的界面xaml定義如下:

……
<Canvas x:Name="Icon">
 <Image x:Name="Body">
  <Image.ToolTip>
   <TextBlock x:Name="Details"/>
  </Image.ToolTip>
 </Image>
< /Canvas>
……

該控件的主體是一張圖片,我為之增加了一個ToolTip用於鼠標懸停時顯示該圖片的描述。

接下來再為通用型角色頭像面板增加一個水平排列的StackPanel控件作為這些Buff圖標的容器:

<StackPanel x:Name="ExtraPanel" OrIEntation="Horizontal" />

為什麼選擇StackPanel而不是其他的布局控件呢?一方面為了與Silverlight更好的兼容,另一方面只要設置好它的寬度,動態的子控件添加或移除隊列起來均非常的完美,我們需要做的僅僅是Add和Remove操作罷了。

最後,在刷新監視對象角色頭像面板方法中添加如下邏輯進行Buff圖標的添加與移除判斷:

……
//更新Buff附加屬性圖標及描述 
for (int i = 0; i < obj.ExtraTime.Count(); i++) {
   QXIcon icon = ObjectRoleFace.ExtraPanel.FindName(string.Format("Extra{0}", i)) as QXIcon;
   if (obj.ExtraTime[i] > 0) {
   XElement ExtraItem = Super.GetTreeNode(Super.SystemXElement["ExtraItems"], "Item", "Value", i.ToString());
   if (icon == null) {
     icon = new QXIcon() {
     Width = 16,
 Height = 16,
 BodySource = Super.getImage(ExtraItem.Attribute("Src").Value)
 };
     ObjectRoleFace.ExtraPanel.RegisterName(string.Format("Extra{0}", i), icon);
     ObjectRoleFace.ExtraPanel.Children.Add(icon);
   }
   icon.Tip = string.Format("{0}持續:{1}秒", ExtraItem.Attribute("Name").Value, obj.ExtraTime[i]);
   } else {
   if (icon != null) {
     ObjectRoleFace.ExtraPanel.UnregisterName(string.Format("Extra{0}", i));
     ObjectRoleFace.ExtraPanel.Children.Remove(icon);
     icon = null;
    }
  }
 }
……

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