當提示文字發生變化時,它的背景將根據文字的長度與寬度自適應尺寸,且此背景為一個透明度40%的黑色圓角矩形,很漂亮的哦~:
/// <summary>
/// 獲取或設置圖標懸停提示
/// </summary>
public string Tip {
get { return Details.Text; }
set {
Details.Text = value;
DialogBack.Width = Details.ActualWidth + 10;
DialogBack.Height = Details.ActualHeight + 10;
}
}
最終效果如下:
接下來我們還是利用QXIcon來實現鼠標左右鍵快捷技能欄,這裡我定義左鍵只負責主角的跑動、對象選中及主角的物理攻擊,前面章節中已經全部實現了。而右鍵則負責施放魔法,此方案應該算是Silverlight的極限了。需求就是當我們在右鍵快捷按鈕圖標上點擊時,會像《暗黑破壞神》一樣,彈出主角已學會(可用)的所有法術和技能。在Silverlight中,我們可以用微軟開源工具包中WrapPanel輕松將之實現。WrapPanel是一個可以實現內部控件排列超出限定寬度後自動換行的容器,繼承自Panel,和Canvas等容器控件屬同一等級,大家可以到http://www.codeplex.com/Silverlight下載最新的版本。本教程示例游戲中,我直接引用它的dll,除它外,該dll還包含其他的一些控件,一方面由於時間有限,我暫時不去單獨分離了;另一方面,後期制作中很有可能還會用到其中的某些控件,因此先讓它這樣吧~,還挺大的呢(112K)。
如果是網絡游戲,那麼在主角初始化後,我們將從服務器接收到主角的數據,當然包括主角已經掌握的魔法技能,這裡我用一個Magic類來表示:
public class Magic {
/// <summary>
/// 代號
/// </summary>
public int Code { get; set; }
/// <summary>
/// 等級
/// </summary>
public int Level { get; set; }
/// <summary>
/// 名稱
/// </summary>
public string Name { get; set; }
}
暫時先就這幾個參數吧,接下來定義一個主角可用魔法列表List<Magic> availableMagic = new List<Magic>();這裡我假設主角已經掌握了代號為0-5的6種魔法,且每種都到了9級,那麼我將這6種魔法按如下方式加入到availableMagic表中:
//初始化主角可用的所有魔法
availableMagic.Clear();
for (int i = 0; i < 6; i++) {
availableMagic.Add(new Magic() {
Code = i,
Level = 9,
Name = string.Format("名稱:{0}\r\n描述:{1}",
Super.GetXElement(Data.Settings["Arguments"], "Magic",
"Code", i.ToString()).Attribute("Name").Value,
Super.GetXElement(Data.Settings["Arguments"], "Magic", "Code",i.ToString()).Attribute("Description").Value) });
}