C#開發WPF/Silverlight動畫及遊戲系列
三、新增功能:
1)新增遊戲的音樂及音效物件:
public static MediaElement gameMusic, gameAudio;
2)新增遊戲滑鼠游標:
//設定遊戲滑鼠游標
GameCursor.Stretch = Stretch.Fill;
GameCursor.Source = Super.GetImage("/Image/Cursor/0.png");
在滑鼠移動事件中根據命中測試進行時時的滑鼠游標圖片位置更新:
//滑鼠移動(懸停)事件
private void Game_MouseMove(object sender, MouseEventArgs e) {
……
Point p = e.GetPosition(Root);
GameCursor.SetValue(Canvas.LeftProperty, p.X); GameCursor.SetValue(Canvas.TopProperty, p.Y);
……
}
此方法實現了滑鼠圖片跟隨游標移動,但是很明顯的影響了程式整體效能(CPU消耗會明顯增加),如果哪位朋友能提供更好的解決方案,望留言給我。
3)新增點選水滴:
當滑鼠在螢幕上左鍵點選時,只要不點到物件物體上,則在該位置顯示出游標水滴,並播放它自身的動畫。目前我的Silverlight遊戲引擎中只用一個游標水滴:
QXDecoration hitCursor;
///
/// 載入游標點選水滴
///
private void LoadHitCursor() {
hitCursor = new QXDecoration() {
Code = 1,
EndFrame = 9,
CenterX = 32,
CenterY = 32,
};
hitCursor.Visibility = Visibility.Collapsed;
Add(hitCursor);
}
//滑鼠左鍵事件
private void Game_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
……
//出現游標水滴
hitCursor.Visibility = Visibility.Visible;
hitCursor.FrameCounter = 0;
hitCursor.Timer.Start();
hitCursor.Coordinate = p;
……
}
如果您想最求更漂亮的點選效果,那麼只需每次滑鼠左鍵點選時建立新的水滴即可:
private void Game_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
……
//出現游標水滴
QXDecoration hitCursor = new QXDecoration() {
Code = 1,
EndFrame = 9,
CenterX = 32,
CenterY = 32,
};
Add(hitCursor);
hitCursor.Coordinate = p;
}
四、360度極光型別魔法的製作及使用方法
大家在看Demo演示時,是否會對那個極光魔法充滿興趣與好奇。它不僅僅是動畫的,而且可以360度隨意旋轉,且傷害範圍為一個不規則矩形區域,而這所有的一切的原始素材僅為我製作的一張圖片而已,下面我將為大家演示它的整個製作流程。
首先我們畫出該魔法向X軸正向的圖片:
神奇的動畫效果就要出現啦,接下來每隔5個色相儲存一張圖片:
最後儲存出8張圖片,並按順序定義好名字:
素材準備工作完成,下面是邏輯上的實現。該極光魔法同樣透過QXMagic來建立例項,當點選滑鼠右鍵時,我們首先獲取滑鼠右鍵點選點的座標,然後根據方法將之延長到攻擊距離。再根據公式計算出直角座標系下實際應該旋轉的角度Angle:
///
/// 根據兩點商值計算角度
///
/// y2-y1值
/// x2-x1值
///
public static double GetAngle(double y, double x) {
return Math.Atan2(y, x) / Math.PI * 180;
}
然後還需要對極光魔法物件進行旋轉處理:
magic.RenderTransform = new RotateTransform() {
CenterX = 0,
CenterY = (double)magicData.Attribute("CenterY"),
Angle = magic.Angle
}
其中CenterY將該魔法發射點及旋轉中心定位到施法者中心,即手的部位;施法時以該中心為旋轉軸進行旋轉。這裡還有個小技巧,即在製作鐳射魔法圖片時,我特意在鐳射頭部與圖片左邊邊緣留下一段距離,這樣做可以不需要額外的程式碼即可以實現從手的前端發射出魔法處進行旋轉,而不是從身體中心進行旋轉發射:
接著確定傷害區域,該區域為一個時時的不規則矩形區域。處理時我將360二維空間劃分為斜4象限,即45度到135度和-135度到-45度這兩個象限為一個傷害區域、其他角度為另外的傷害區域,那麼最後得到的公式如下:
///
/// 根據45度斜四象限獲取矩形四個頂點(直線穿梭魔法用)
///
/// 旋轉角度
/// 矩形中線起點
/// 矩形中線終點
/// 矩形中線與邊距離
///
public static Point[] GetRectRange(double angle, Point start, Point end, int radius) {
if ((angle >= 45 && angle = -135 && angle
return new Point[]{
new Point(start.X - radius, start.Y),
new Point(start.X + radius, start.Y),
new Point(end.X + radius, end.Y),
new Point(end.X - radius, end.Y),
};
} else {
return new Point[]{
new Point(start.X, start.Y - radius),
new Point(start.X, start.Y + radius),
new Point(end.X, end.Y + radius),
new Point(end.X, end.Y - radius),
};
}
}
這樣做公式簡單,省掉了對每個頂點的獲取及旋轉變換。
最後透過判斷所有在螢幕中的敵對精靈座標是否處於該矩形區域內進行傷害處理:
///
/// 判斷點是否在多邊形內(射線法)
///
/// 目標點
/// 多邊形各頂點
///
public static bool InPolygon(Point target, Point[] range) {
int n = 0, count = 0;
for (int i = 0; i
n = (i == range.Length - 1) ? 0 : n + 1;
if ((range[i].Y != range[n].Y) && (((target.Y >= range[i].Y) && (target.Y = range[n].Y) && (target.Y
count++;
}
}
return (count % 2 > 0) ? true : false;
}
用了兩節的時間進行了本教程示例遊戲從WPF向Silverlight平臺的移植的關鍵點講解,當然細節的最佳化還有非常多,原始碼釋出後大家應該都能理解,因此這裡也不累述了。後面的教程均將在此Silverlight引擎的基礎上進行全新演義,下一節首先講解的是如何製作遊戲中的小地圖,敬請關注。
作者:深藍色右手
出處:http://alamiye010.cnblogs.com/
教程目錄及原始碼下載:點選進入(歡迎加入WPF/Silverlight小組 WPF/Silverlight部落格團隊)
本文版權歸作者和部落格園共有,歡迎轉載。但未經作者同意必須保留此段宣告,且在文章頁面顯著位置給出原文連線,否則保留追究法律責任的權利。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4328/viewspace-2812151/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【譯】闖入遊戲開發 #5:動畫遊戲開發動畫
- iOS開發 - 動畫實踐系列iOS動畫
- 微信小遊戲開發(4)-動畫和觸控事件遊戲開發動畫事件
- 動畫改編遊戲的不易:從《馴龍高手》系列遊戲談改編動畫遊戲
- WPF兩種緩動動畫動畫
- U3D遊戲開發從入門到彎道超車(2):《Flappy Bird》場景動畫及角色動畫製作3D遊戲開發APP動畫
- 緩動公式整理(附:C#實現及WPF原版對比)公式C#
- 《BitUp》:畫素風格遊戲及地圖編輯器的開發歷程遊戲地圖
- WPF loading載入動畫庫動畫
- C#微信開發系列教程C#
- C# 10動畫C#動畫
- WPF3D立方體圖形展開動畫思路3D動畫
- WPF給控制元件新增運動動畫控制元件動畫
- 《Flutter 動畫系列》組合動畫Flutter動畫
- 被遊戲耽誤的動畫公司紛紛湧現!遊戲衍生動畫能走多遠?遊戲動畫
- 使用C#和MonoGame開發俄羅斯方塊遊戲C#MonoGAM遊戲
- 遊戲發展史:《全面戰爭》系列(1):開端遊戲
- 遊戲開發入門(一)遊戲開發概述遊戲開發
- WPF/C#:BusinessLayerValidationC#
- 不可不知的WPF動畫(Animation)動畫
- Flutter 掌握動畫開發Flutter動畫
- 雜湊競猜遊戲系統開發(方案及邏輯)丨雜湊競猜遊戲開發(原始碼及專案)遊戲開發原始碼
- 資深美術分享:遊戲開發如何確定畫風?遊戲開發
- FDF互助智慧合約遊戲系統開發(開發原理及方案)遊戲
- 《Unity移動遊戲開發》讀後感Unity遊戲開發
- NFT遊戲系統開發/遊戲開發技術遊戲開發
- 雜湊遊戲系統丨雜湊遊戲系統開發(演示版)丨雜湊遊戲開發原始碼及案例遊戲開發原始碼
- 盲盒遊戲開發(功能)丨盲盒遊戲系統開發(規則及詳細)丨盲盒遊戲原始碼部署遊戲開發原始碼
- 遊戲畫素畫風格研究:變遷與發展遊戲
- 03:遊戲主角動起來啦!#python遊戲開發#紅傘傘Python遊戲開發
- WPF 後臺程式碼做 TranslateTransform 的動畫ORM動畫
- 遊戲趣史:開羅遊戲與它的畫素帝國遊戲
- 遊戲陪玩系統原始碼開發,如何實現圖片和動畫的優化?遊戲原始碼動畫優化
- 《Project DT》:主機動作遊戲,開發中Project遊戲
- 遊戲開發流程遊戲開發
- 逃不開動畫印記!日式機器人遊戲特色總結動畫機器人遊戲
- 雜湊競猜遊戲開發正式版丨雜湊競猜遊戲系統開發(開發詳細)及原始碼案例遊戲開發原始碼
- 區塊鏈遊戲系統開發(Gamefi鏈遊開發案例)丨Gamefi鏈遊系統開發詳細及原始碼區塊鏈遊戲GAM原始碼