1 / 52

Chapter 19 遊戲動畫技巧

Chapter 19 遊戲動畫技巧. 本章重點. -1 基礎動畫展示 -2 動畫顯示問題 -3 背景動畫設計. 基礎動畫展示. 遊戲中展現動畫的方式有兩種:一種是直接播放影片檔案 ( 如: AVI 、 MPEG) ,常用在遊戲的片頭與片尾;另一種則是遊戲進行時利用連續貼圖的方式,製造動畫的效果。. 計時器的使用. 計時器 (Timer) 物件可以每隔一段時間發出一個時間訊息,而程式一旦接收到此一訊息之後便可以決定接下來要做那些事情。. 建立計時器. Windows API 的 SetTimer() 函式可為視窗建立一個計時器 。.

fiona-cash
Télécharger la présentation

Chapter 19 遊戲動畫技巧

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 19 遊戲動畫技巧

  2. 本章重點 • -1 基礎動畫展示 • -2 動畫顯示問題 • -3 背景動畫設計

  3. 基礎動畫展示 • 遊戲中展現動畫的方式有兩種:一種是直接播放影片檔案(如:AVI、MPEG),常用在遊戲的片頭與片尾;另一種則是遊戲進行時利用連續貼圖的方式,製造動畫的效果。

  4. 計時器的使用 • 計時器(Timer)物件可以每隔一段時間發出一個時間訊息,而程式一旦接收到此一訊息之後便可以決定接下來要做那些事情。

  5. 建立計時器 • Windows API的SetTimer()函式可為視窗建立一個計時器 。 UINT SetTimer( HWND接收計時器訊息的視窗, UINT 計時器代號, UINT 時間間隔, TIMERPROC 處理回呼函式);

  6. 底下是設定一每隔0.5秒發出WM_TIMER訊息計時器的程式碼:底下是設定一每隔0.5秒發出WM_TIMER訊息計時器的程式碼: SetTimer(hWnd,1,500,NULL);

  7. 刪除計時器 • 一旦建立了一個計時器後,它就一直自動的依設定的時間間隔發出WM_TIMER訊息,若我們要停用某個計時器,必須使用KillTimer函式

  8. girl0.bmp girl1.bmp girl2.bmp girl3.bmp girl4.bmp girl5.bmp girl6.bmp

  9. 全域變數宣告

  10. InitInstance( )

  11. InitInstance( ) (續) 載入各人物圖 建立計時器,間隔0.5秒發出訊息

  12. WndPro 呼叫MyPaint 刪除計時器

  13. MyPaint( ) 判斷目前圖號是否已超過最大圖號 依照目前圖號 進行視窗貼圖

  14. 遊戲迴圈 • 遊戲本身要顯示順暢的遊戲畫面,使玩家感覺不到延遲的狀況,基本上遊戲畫面必須在一秒鐘之內更新至少25次以上 。

  15. Exercise 06 • 將ch19_01程式改為每秒重畫25個畫面。 • 專案名稱為『學號_06』 • (例:8223582_06) • 編譯及執行無誤後,使用ftp將『學號_06.cpp』上傳至192.192.155.217的EX06目錄下,帳號:student5,密碼:student5

  16. 遊戲迴圈是將原先程式中的訊息迴圈加以修改,其中內容判斷目前是否有要處理的訊息,若有則進行處理;否則便依設定的時間間隔來重繪畫面。遊戲迴圈是將原先程式中的訊息迴圈加以修改,其中內容判斷目前是否有要處理的訊息,若有則進行處理;否則便依設定的時間間隔來重繪畫面。

  17. //遊戲迴圈 while( msg.message!=WM_QUIT ) { if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else { tNow = GetTickCount(); if(tNow-tPre >= 40) MyPaint(hdc); } } 偵測訊息 取得目前時間

  18. 透空動畫 • 「透空動畫」是遊戲中一定會運用到的基本技巧,它結合了圖案的連續顯示以及透空來產生背景圖上的動畫效果。

  19. 全域變數宣告 bg是背景圖 dra是恐龍連續跑動及遮罩圖

  20. InitInstance( ) 建立一個空的點陣圖物件

  21. InitInstance( ) (續) 載入恐龍圖及背景圖

  22. MyPaint( ) 依照圖號取出跑動圖及 遮罩圖,進行透空繪圖

  23. Exercise 07 • 下載並改寫ch19_02.cpp程式,利用Mouse移動偵測的方法,如果Mouse移動恐龍就會依照mouse的高度行走。 • 專案名稱為『學號_07』 • (例:8223582_07) • 編譯及執行無誤後,使用ftp將『學號_07.cpp』上傳至192.192.155.217的EX04目錄下,帳號:student5,密碼:student5

  24. 排序貼圖 • 「排序貼圖」的問題是源自於物體遠近呈現的一種貼圖概念。

  25. 氣泡排序法(Bubble sort) 1 2 3 5 7 2 1 3 5 7 7 5 2 1 3 5 2 1 3 7 5 7 2 1 3 2 5 1 3 7 1 2 3 5 7 1 2 3 5 7 5 2 7 1 3 2 1 5 3 7 1 2 3 5 7 5 2 1 7 3 2 1 3 5 7 5 2 1 3 7

  26. 結構定義與常變數宣告

  27. 氣泡排序法

  28. MyPaint( )

  29. Exercise 08 • 下載並改寫ch19_03.cpp程式,恐龍不改變方向的機率0.4,其他三個方向的機率都是0.5。 • 專案名稱為『學號_08』 • (例:8223582_08) • 編譯及執行無誤後,使用ftp將『學號_08.cpp』上傳至192.192.155.217的EX04目錄下,帳號:student5,密碼:student5

  30. 背景動畫設計 • 背景動畫的製作概念同樣是利用連續貼圖的原理,2D遊戲中經常運用到的動態背景表現手法大致有3種 : • 單一背景捲動 • 循環背景動畫 • 多循環背景動畫

  31. 單一背景捲動 • 單一背景捲動的方式是利用一張相當大的背景圖,當遊戲進行的時候,隨著畫面中人物的移動,背景的顯示區域便跟著移動 。

  32. 全域變數宣告

  33. WndProc

  34. WndProc (續)

  35. 循環背景動畫 • 循環背景是不斷地進行背景圖的裁切與接合,然後顯示於視窗上所產生的一種背景畫面循環捲動的效果。

  36. 全域變數宣告

  37. InitInstance( )

  38. MyPaint( )

  39. 多背景循環動畫 • 以貼圖的方式製作多背景循環動畫時,我們必須要能夠決定不同背景貼圖的先後順序以及捲動的速度。

  40. 天空 山巒 草地 房屋

  41. 全域變數宣告

  42. InitInstance( ) 載入各背景圖及前景圖

More Related