動畫簡而言之就是展示乙個又乙個的影象來製造運動的假象。在這裡我們將展示不同的精靈來製作乙個簡筆畫的動畫。
假設我們有以下動畫幀(這清楚地表明我不是動畫師):
而且每隔十分之一秒就顯示乙個,我們會得到這個動畫:
由於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較為深入的內容已非難事。作為本教程的最後一課,雞啄公尺將對前面所講內容進行目錄歸納,並對這八個月加班加點的努力進行總結...