SDL程式設計入門(14)動畫精靈和VSync

2021-10-09 14:49:17 字數 1961 閱讀 9171

動畫簡而言之就是展示乙個又乙個的影象來製造運動的假象。在這裡我們將展示不同的精靈來製作乙個簡筆畫的動畫。

假設我們有以下動畫幀(這清楚地表明我不是動畫師):

而且每隔十分之一秒就顯示乙個,我們會得到這個動畫:

由於sdl 2中的影象是典型的sdl_textures,所以在sdl中的動畫是乙個接乙個地顯示紋理的不同部分(或不同的整體紋理)。

//走路動畫

const

int walking_animation_frames =4;

sdl_rect gspriteclips[ walking_animation_frames ]

;ltexture gspritesheettexture;

所以,這裡我們有帶有精靈的精靈表,我們要用它來製作動畫。

//為視窗建立垂直同步渲染器

grenderer =

sdl_createrenderer

( gwindow,-1

, sdl_renderer_accelerated | sdl_renderer_presentvsync );if

( grenderer ==

null

)

bool

loadmedia()

else

return success;

}

在載入完精靈表後,我們要定義各個動畫幀的精靈。

//main loop flag

bool quit =

false

;//event handler

sdl_event e;

//current animation frame

int frame =

0;

在主迴圈之前,我們必須宣告乙個變數來跟蹤當前的動畫幀。

//渲染當前幀

sdl_rect* currentclip =

&gspriteclips[ frame /4]

;gspritesheettexture.

render

(( screen_width - currentclip-

>w )/2

,( screen_height - currentclip-

>h )/2

, currentclip )

;//update screen

sdl_renderpresent

( grenderer )

;

在主迴圈中清空螢幕後,我們要渲染當前幀的動畫。

動畫從第0幀到第3幀,由於動畫只有4幀,所以我們要把動畫的速度放慢一點。這就是為什麼當我們得到當前裁剪精靈時,我們要將幀除以4。 這樣實際的動畫幀只每4幀更新一次,因為用int資料型別0/4=0,1/4=0,2/4=0,3/4=0,4/4=1,5/4=1,等等。

當我們得到當前的精靈後,我們要把它渲染到螢幕上,並更新螢幕。

//轉到下一幀

++frame;

//迴圈動畫

if( frame /

4>= walking_animation_frames )

}

現在為了讓幀更新,我們需要每一幀遞增幀值。如果我們不這樣做,那麼動畫將停留在第一幀。

我們還想讓動畫迴圈,所以當幀達到最終值(16 / 4 = 4)時,我們將幀重置為0,這樣動畫就會重新開始。

在我們通過遞增或迴圈更新幀到0之後,我們就到達了主迴圈的終點。這個主迴圈將不斷地顯示一幀並更新動畫值,使精靈產生動畫。

VS2010 MFC程式設計入門教程之目錄和總結

部落格。一 vs2010 mfc程式設計入門教程之目錄 第一部分 vs2010 mfc開發環境 vs2010 mfc程式設計入門之前言 vs2010 mfc程式設計入門之一 vs2010與msdn安裝過程 第二部分 vs2010 mfc應用程式框架 vs2010 mfc程式設計入門之二 利用mfc嚮...

VS2010 MFC程式設計入門教程之目錄和總結

雞啄公尺的這套vs2010 mfc程式設計入門教程到此就全部完成了,雖然有些內容還未涉及到,但幫助大家進行vs2010 mfc的入門學習業已足夠。以此教程的知識為基礎,學習vs2010 mfc較為深入的內容已非難事。作為本教程的最後一課,雞啄公尺將對前面所講內容進行目錄歸納,並對這八個月加班加點的努...

VS2010 MFC程式設計入門教程之目錄和總結

這套vs2010 mfc程式設計入門教程到此就全部完成了,雖然有些內容還未涉及到,但幫助大家進行vs2010 mfc的入門學習業已足夠。以此教程的知識為基礎,學習vs2010 mfc較為深入的內容已非難事。作為本教程的最後一課,雞啄公尺將對前面所講內容進行目錄歸納,並對這八個月加班加點的努力進行總結...