chapter 19 遊戲動畫技巧

52
Chapter 19 遊遊遊遊遊遊

Upload: fiona-cash

Post on 01-Jan-2016

47 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Chapter 19  遊戲動畫技巧

Chapter 19 遊戲動畫技巧

Page 2: Chapter 19  遊戲動畫技巧

本章重點

-1 基礎動畫展示

-2 動畫顯示問題

-3 背景動畫設計

Page 3: Chapter 19  遊戲動畫技巧

基礎動畫展示

遊戲中展現動畫的方式有兩種:一種是直接

播放影片檔案 ( 如: AVI 、 MPEG) ,常用在

遊戲的片頭與片尾;另一種則是遊戲進行時

利用連續貼圖的方式,製造動畫的效果。

Page 4: Chapter 19  遊戲動畫技巧

計時器的使用

計時器 (Timer) 物件可以每隔一段時間

發出一個時間訊息,而程式一旦接收到

此一訊息之後便可以決定接下來要做那

些事情。

Page 5: Chapter 19  遊戲動畫技巧

Windows API 的 SetTimer() 函式可為視窗建立一個計時器 。

UINT SetTimer( HWND 接收計時器訊息的視窗 ,UINT 計時器代號 ,

UINT 時間間隔 , TIMERPROC 處理回呼函式 );

建立計時器

Page 6: Chapter 19  遊戲動畫技巧

底下是設定一每隔 0.5 秒發出 WM_TIMER

訊息計時器的程式碼:

SetTimer(hWnd,1,500,NULL);

Page 7: Chapter 19  遊戲動畫技巧

刪除計時器

一旦建立了一個計時器後,它就一直自

動的依設定的時間間隔發出 WM_TIMER

訊息,若我們要停用某個計時器,必須

使用 KillTimer 函式

Page 8: Chapter 19  遊戲動畫技巧

girl0.bmp

girl1.bmp

girl2.bmp

girl3.bmp

girl4.bmp

girl5.bmp

girl6.bmp

Page 9: Chapter 19  遊戲動畫技巧

全域變數宣告

Page 10: Chapter 19  遊戲動畫技巧

InitInstance( )

Page 11: Chapter 19  遊戲動畫技巧

InitInstance( ) ( 續 )

載入各人物圖

建立計時器,間隔 0.5 秒發出訊息

Page 12: Chapter 19  遊戲動畫技巧

WndPro

呼叫 MyPaint

刪除計時器

Page 13: Chapter 19  遊戲動畫技巧

MyPaint( )

依照目前圖號進行視窗貼圖

判斷目前圖號是否已超過最大圖號

Page 14: Chapter 19  遊戲動畫技巧

遊戲迴圈

遊戲本身要顯示順暢的遊戲畫面,使玩

家感覺不到延遲的狀況,基本上遊戲畫

面必須在一秒鐘之內更新至少 25 次以

上 。

Page 15: Chapter 19  遊戲動畫技巧

Exercise 06

將 ch19_01 程式改為每秒重畫 25 個畫面。 專案名稱為『學號 _06 』

( 例: 8223582_06) 編譯及執行無誤後,使用 ftp 將『學號 _0

6.cpp 』上傳至 192.192.155.217 的 EX06目錄下,帳號: student5 ,密碼: student5

Page 16: Chapter 19  遊戲動畫技巧

遊戲迴圈是將原先程式中的訊息迴圈加以修

改,其中內容判斷目前是否有要處理的訊息,

若有則進行處理;否則便依設定的時間間隔

來重繪畫面。

Page 17: Chapter 19  遊戲動畫技巧

// 遊戲迴圈 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);}

}

偵測訊息

取得目前時間

Page 18: Chapter 19  遊戲動畫技巧

透空動畫

「透空動畫」是遊戲中一定會運用到的基本

技巧,它結合了圖案的連續顯示以及透空來

產生背景圖上的動畫效果。

Page 19: Chapter 19  遊戲動畫技巧
Page 20: Chapter 19  遊戲動畫技巧

全域變數宣告

bg 是背景圖dra 是恐龍連續跑動及遮罩圖

Page 21: Chapter 19  遊戲動畫技巧

InitInstance( )

建立一個空的點陣圖物件

Page 22: Chapter 19  遊戲動畫技巧

InitInstance( ) ( 續 )

載入恐龍圖及背景圖

Page 23: Chapter 19  遊戲動畫技巧

MyPaint( )

依照圖號取出跑動圖及遮罩圖,進行透空繪圖

Page 24: Chapter 19  遊戲動畫技巧

Exercise 07

下載並改寫 ch19_02.cpp 程式,利用 Mouse移動偵測的方法,如果 Mouse移動恐龍就會依照 mouse 的高度行走。

專案名稱為『學號 _07 』 ( 例: 8223582_07)

編譯及執行無誤後,使用 ftp 將『學號 _07.cpp 』上傳至 192.192.155.217 的 EX04目錄下,帳號: student5 ,密碼: student5

Page 25: Chapter 19  遊戲動畫技巧

排序貼圖 「排序貼圖」的問題是源自於物體遠近呈

現的一種貼圖概念。

Page 26: Chapter 19  遊戲動畫技巧

氣泡排序法 (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

Page 27: Chapter 19  遊戲動畫技巧
Page 28: Chapter 19  遊戲動畫技巧

結構定義與常變數宣告

Page 29: Chapter 19  遊戲動畫技巧
Page 30: Chapter 19  遊戲動畫技巧
Page 31: Chapter 19  遊戲動畫技巧

氣泡排序法

Page 32: Chapter 19  遊戲動畫技巧

MyPaint( )

Page 33: Chapter 19  遊戲動畫技巧
Page 34: Chapter 19  遊戲動畫技巧
Page 35: Chapter 19  遊戲動畫技巧

Exercise 08

下載並改寫 ch19_03.cpp 程式,恐龍不改變方向的機率 0.4 ,其他三個方向的機率都是 0.5 。

專案名稱為『學號 _08 』 ( 例: 8223582_08)

編譯及執行無誤後,使用 ftp 將『學號 _08.cpp 』上傳至 192.192.155.217 的 EX04目錄下,帳號: student5 ,密碼: student5

Page 36: Chapter 19  遊戲動畫技巧

背景動畫設計

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

循環背景動畫

多循環背景動畫

Page 37: Chapter 19  遊戲動畫技巧

單一背景捲動

單一背景捲動的方式是利用一張相當大的背

景圖,當遊戲進行的時候,隨著畫面中人物

的移動,背景的顯示區域便跟著移動 。

Page 38: Chapter 19  遊戲動畫技巧
Page 39: Chapter 19  遊戲動畫技巧

全域變數宣告

Page 40: Chapter 19  遊戲動畫技巧

WndProc

Page 41: Chapter 19  遊戲動畫技巧

WndProc ( 續 )

Page 42: Chapter 19  遊戲動畫技巧

循環背景動畫

循環背景是不斷地進行背景圖的裁切與接合,

然後顯示於視窗上所產生的一種背景畫面循

環捲動的效果。

Page 43: Chapter 19  遊戲動畫技巧
Page 44: Chapter 19  遊戲動畫技巧

全域變數宣告

Page 45: Chapter 19  遊戲動畫技巧

InitInstance( )

Page 46: Chapter 19  遊戲動畫技巧

MyPaint( )

Page 47: Chapter 19  遊戲動畫技巧

多背景循環動畫

以貼圖的方式製作多背景循環動畫時,我們

必須要能夠決定不同背景貼圖的先後順序以

及捲動的速度。

Page 48: Chapter 19  遊戲動畫技巧

天空

山巒

房屋草地

Page 49: Chapter 19  遊戲動畫技巧

全域變數宣告

Page 50: Chapter 19  遊戲動畫技巧

InitInstance( )

載入各背景圖及前景圖

Page 51: Chapter 19  遊戲動畫技巧

MyPaint( )

Page 52: Chapter 19  遊戲動畫技巧

MyPaint( )