chapter 19 遊戲動畫技巧
DESCRIPTION
Chapter 19 遊戲動畫技巧. 本章重點. -1 基礎動畫展示 -2 動畫顯示問題 -3 背景動畫設計. 基礎動畫展示. 遊戲中展現動畫的方式有兩種:一種是直接播放影片檔案 ( 如: AVI 、 MPEG) ,常用在遊戲的片頭與片尾;另一種則是遊戲進行時利用連續貼圖的方式,製造動畫的效果。. 計時器的使用. 計時器 (Timer) 物件可以每隔一段時間發出一個時間訊息,而程式一旦接收到此一訊息之後便可以決定接下來要做那些事情。. 建立計時器. Windows API 的 SetTimer() 函式可為視窗建立一個計時器 。. - PowerPoint PPT PresentationTRANSCRIPT
Chapter 19 遊戲動畫技巧
本章重點
-1 基礎動畫展示
-2 動畫顯示問題
-3 背景動畫設計
基礎動畫展示
遊戲中展現動畫的方式有兩種:一種是直接
播放影片檔案 ( 如: AVI 、 MPEG) ,常用在
遊戲的片頭與片尾;另一種則是遊戲進行時
利用連續貼圖的方式,製造動畫的效果。
計時器的使用
計時器 (Timer) 物件可以每隔一段時間
發出一個時間訊息,而程式一旦接收到
此一訊息之後便可以決定接下來要做那
些事情。
Windows API 的 SetTimer() 函式可為視窗建立一個計時器 。
UINT SetTimer( HWND 接收計時器訊息的視窗 ,UINT 計時器代號 ,
UINT 時間間隔 , TIMERPROC 處理回呼函式 );
建立計時器
底下是設定一每隔 0.5 秒發出 WM_TIMER
訊息計時器的程式碼:
SetTimer(hWnd,1,500,NULL);
刪除計時器
一旦建立了一個計時器後,它就一直自
動的依設定的時間間隔發出 WM_TIMER
訊息,若我們要停用某個計時器,必須
使用 KillTimer 函式
girl0.bmp
girl1.bmp
girl2.bmp
girl3.bmp
girl4.bmp
girl5.bmp
girl6.bmp
全域變數宣告
InitInstance( )
InitInstance( ) ( 續 )
載入各人物圖
建立計時器,間隔 0.5 秒發出訊息
WndPro
呼叫 MyPaint
刪除計時器
MyPaint( )
依照目前圖號進行視窗貼圖
判斷目前圖號是否已超過最大圖號
遊戲迴圈
遊戲本身要顯示順暢的遊戲畫面,使玩
家感覺不到延遲的狀況,基本上遊戲畫
面必須在一秒鐘之內更新至少 25 次以
上 。
Exercise 06
將 ch19_01 程式改為每秒重畫 25 個畫面。 專案名稱為『學號 _06 』
( 例: 8223582_06) 編譯及執行無誤後,使用 ftp 將『學號 _0
6.cpp 』上傳至 192.192.155.217 的 EX06目錄下,帳號: student5 ,密碼: student5
遊戲迴圈是將原先程式中的訊息迴圈加以修
改,其中內容判斷目前是否有要處理的訊息,
若有則進行處理;否則便依設定的時間間隔
來重繪畫面。
// 遊戲迴圈 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);}
}
偵測訊息
取得目前時間
透空動畫
「透空動畫」是遊戲中一定會運用到的基本
技巧,它結合了圖案的連續顯示以及透空來
產生背景圖上的動畫效果。
全域變數宣告
bg 是背景圖dra 是恐龍連續跑動及遮罩圖
InitInstance( )
建立一個空的點陣圖物件
InitInstance( ) ( 續 )
載入恐龍圖及背景圖
MyPaint( )
依照圖號取出跑動圖及遮罩圖,進行透空繪圖
Exercise 07
下載並改寫 ch19_02.cpp 程式,利用 Mouse移動偵測的方法,如果 Mouse移動恐龍就會依照 mouse 的高度行走。
專案名稱為『學號 _07 』 ( 例: 8223582_07)
編譯及執行無誤後,使用 ftp 將『學號 _07.cpp 』上傳至 192.192.155.217 的 EX04目錄下,帳號: student5 ,密碼: student5
排序貼圖 「排序貼圖」的問題是源自於物體遠近呈
現的一種貼圖概念。
氣泡排序法 (Bubble sort)
7 5 2 1 3
5 7 2 1 3
5 2 7 1 3
5 2 1 7 3
5 2 1 3 7
5 2 1 3 7
2 5 1 3 7
2 1 5 3 7
2 1 3 5 7
1 2 3 5 7
2 1 3 5 7
1 2 3 5 7
1 2 3 5 7
1 2 3 5 7
結構定義與常變數宣告
氣泡排序法
MyPaint( )
Exercise 08
下載並改寫 ch19_03.cpp 程式,恐龍不改變方向的機率 0.4 ,其他三個方向的機率都是 0.5 。
專案名稱為『學號 _08 』 ( 例: 8223582_08)
編譯及執行無誤後,使用 ftp 將『學號 _08.cpp 』上傳至 192.192.155.217 的 EX04目錄下,帳號: student5 ,密碼: student5
背景動畫設計
背景動畫的製作概念同樣是利用連續貼圖的原理, 2D 遊戲中經常運用到的動態背景表現手法大致有 3 種 :單一背景捲動
循環背景動畫
多循環背景動畫
單一背景捲動
單一背景捲動的方式是利用一張相當大的背
景圖,當遊戲進行的時候,隨著畫面中人物
的移動,背景的顯示區域便跟著移動 。
全域變數宣告
WndProc
WndProc ( 續 )
循環背景動畫
循環背景是不斷地進行背景圖的裁切與接合,
然後顯示於視窗上所產生的一種背景畫面循
環捲動的效果。
全域變數宣告
InitInstance( )
MyPaint( )
多背景循環動畫
以貼圖的方式製作多背景循環動畫時,我們
必須要能夠決定不同背景貼圖的先後順序以
及捲動的速度。
天空
山巒
房屋草地
全域變數宣告
InitInstance( )
載入各背景圖及前景圖
MyPaint( )
MyPaint( )