中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Silverlight 游戲開發小技巧:動感小菜單2

發布時間:2020-06-11 01:47:42 來源:網絡 閱讀:488 作者:nowpaper 欄目:開發技術

動感小菜單其實是想模仿Apple的菜單按鈕設計制作,但是畫虎不成反類犬,看起來有點別扭,昨天各位園友提了這方面的建議,感覺太硬如果加入動畫可能更好,非常感謝各位,而今天這篇的動感小菜單2,讓按鈕更加動感“柔”順:)期望能做的更好吧。

 

Silverlight 游戲開發小技巧:動感小菜單2

我們可以直接借助昨天的工程,在上面的基礎上修改,打開昨天的工程(Silverlight 游戲開發小技巧:動感小菜單):

 

Silverlight 游戲開發小技巧:動感小菜單2

直接選定一個StackPanel的Group,然后按住Alt鍵復制一個,為了方便編程,這次我們將它制作成一個控件:

 

Silverlight 游戲開發小技巧:動感小菜單2

在結構里面直接選擇剛才Copy的組,點擊右鍵選擇Make Into UserControl,中文版是制作成為自定義用戶控件選項。

 

Silverlight 游戲開發小技巧:動感小菜單2

輸入一個名字,OK,就會自動進入到這個控件的編輯界面,關于自定義控件,我想其他的Blend教程有詳細介紹,這里只介紹技巧相關的內容。

 

Silverlight 游戲開發小技巧:動感小菜單2

現在我們進入到VS中編程,當然了,如果您喜歡在Blend里直接寫也可以,我個人比較習慣在VS里編輯:)

你可以在工程中找到剛才制作的控件,選擇對應的cs文件開始寫代碼吧。

 

Silverlight 游戲開發小技巧:動感小菜單2

首先,要設定IconCard的圖像(請一定參看前一篇,本篇是在前一篇中進行的擴展)

在Group3Control的構造函數中寫成這樣:

  1. public Group3Control()   
  2. {   
  3. InitializeComponent();   
  4. for (int i = 0; i < Group3.Children.Count; i++)   
  5. {   
  6. var item = Group3.Children[i] as IconCard;   
  7. item.RenderTransformOrigin = new Point(0.5, 0.5);   
  8. item.RenderTransform = new ScaleTransform() { ScaleX = 1ScaleY = 1 };   
  9. iitem.IconIndex = i;   
  10. }   
  11. }   
前面看過的朋友應該不難理解,這時一個指定操作。

 

下面重寫控件的MouseEnter和MouseLeave的函數。

  1. protected override void OnMouseMove(MouseEventArgs e)   
  2. {   
  3.     
  4. foreach (var item in Group3.Children)   
  5. {   
  6. var t = item as IconCard;   
  7. if (t == null)   
  8. continue;   
  9. double x = e.GetPosition(t).X - t.ActualWidth / 2;   
  10. double y = e.GetPosition(t).Y - t.ActualHeight / 2;   
  11. double mine = Math.Sqrt(x * x + y * y);   
  12. double mineZoom = Zoom(1.2, mine, 72);   
  13. (t.RenderTransform as ScaleTransform).ScaleX = mineZoom;   
  14. (t.RenderTransform as ScaleTransform).ScaleY = mineZoom;   
  15. }   
  16. base.OnMouseLeave(e);   
  17. }   
  18. protected override void OnMouseLeave(MouseEventArgs e)   
  19. {   
  20. foreach (var item in Group3.Children)   
  21. {   
  22. var t = item as IconCard;   
  23. if (t == null)   
  24. continue;   
  25. (t.RenderTransform as ScaleTransform).ScaleX = 1;   
  26. (t.RenderTransform as ScaleTransform).ScaleY = 1;   
  27. }   
  28.     
  29. base.OnMouseLeave(e);   
  30. }   
  31. double Zoom(double m, double d, double s)   
  32. {   
  33. if (d < s)   
  34. {   
  35. return (m * (d - s) * (d - s) / (s * s) + 1);   
  36. }   
  37. else   
  38. {   
  39. return 1.0;   
  40. }   
  41. }   

具體意思是,當鼠標移入的時候,就會計算鼠標和控件的位置,并將所有的子元素遍歷修改放縮,由于通過算法得出,可以很好的讓小按鈕達到“柔”順的感覺:)

非常感謝路毅提供的算法,使得我能夠更專注做關鍵的工作,特此感謝。本工程中有一段是注釋掉的內容,就是他之前的實現效果,有興趣的朋友可以把注釋去掉,看看是什么樣子。

本篇工程源代碼下載地址如下:點擊直接下載

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸州市| 磴口县| 孟村| 阳谷县| 庆阳市| 中卫市| 灵寿县| 盐池县| 嘉祥县| 静乐县| 贵州省| 突泉县| 衡阳县| 沙湾县| 鄂托克旗| 夹江县| 偏关县| 汝州市| 佛坪县| 苏尼特右旗| 台北县| 卢龙县| 高雄市| 库伦旗| 北辰区| 房山区| 体育| 班戈县| 巴中市| 沂水县| 广饶县| 分宜县| 临武县| 靖江市| 韩城市| 微山县| 肃北| 达孜县| 全南县| 博野县| 定南县|