April 3
Simple DirectMedia Layer consente l'accesso ad audio, tastiera, mouse, joystick, OpenGL 3-D hardware e 2-D Video framebuffer. Utilizzato con software di riproduzione MPEG, emulatori e altri giochi, il programma SDL è utile per una varietà di cose, come ad esempio l'animazione di un gioco scroller laterale. SDL funziona in modo nativo con C ++, ma funziona anche in C, Ada, C #, D, Eiffell, Erlang, Euphoria, Go, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant , Python, Ruby, Smalltalk e Tcl.
1 Creare due nuovi file chiamati "CAnimation.h" e "CAnimation.cpp /". Aggiungere la seguente direttiva "include" in "CApp.h": ". # Include 'CAnimation.h'"
2 Apri "CAnimation.h" e inserire il seguente codice:
ifndef _CANIMATION
H #define _CANIMATION
H
includere <SDL.h>
class CAnimation {
privato:
int currentFrame;
int FrameInc;
privato:
int FrameRate; // millisecondi
lungo Oldtime;
pubblico:
Int MaxFrames;
pubblico:
CAnimation ();
annullare OnAnimate ();
pubblico:
SetFrameRate void (int Rate);
SetCurrentFrame void (int Frame);
int GetCurrentFrame ();
};
endif 3 Aprire "CAnimation.cpp" e inserire il seguente codice con i propri valori di frame rate: includere "CAnimation.h"
CAnimation :: CAnimation () {
CurrentFrame = 0;
MaxFrames = 0;
FrameInc = 1;
FrameRate = 100; // millisecondi
Oldtime = 0;
}
CAnimation vuoto :: OnAnimate () {
if (Oldtime + FrameRate> SDL_GetTicks ()) {
ritorno;
}
Oldtime = SDL_GetTicks ();
CurrentFrame + = FrameInc;
if (FrameInc> 0) {
if (currentFrame> = MaxFrames - 1) {
FrameInc = -FrameInc;
}
}altro{
if (currentFrame <= 0) {
FrameInc = -FrameInc;
}
}
}altro{
if (currentFrame> = MaxFrames - 1) {
CurrentFrame = 0;
}
}
}
CAnimation vuoto :: SetFrameRate (int Rate) {
FrameRate = Tasso;
}
invalidare CAnimation :: SetCurrentFrame (int Frame) {
if (telaio <0 || frame> = MaxFrames) return;
CurrentFrame = Telaio;
}
int CAnimation :: GetCurrentFrame () {
tornare currentFrame;
}
4 Disegnare il "currentFrame" dell'animazione scorrimento laterale determinando la parte della superficie si disegnare sullo schermo. Per esempio, se l'animazione è di 64 per 64 pixel, sarà di ingresso qualcosa di simile a questo:
CSurface :: OnDraw (Surf_Display, Surf_Image, 0, 0, 0, Animate.GetCurrentFrame () * 64, 64, 64);
5 Conoscere il numero di fotogrammi dell'animazione contiene, noto anche come "MaxFrames." Utilizzare questo codice nella funzione "OnAnimate" per scoprire i "MaxFrames":
if (Oldtime + FrameRate> SDL_GetTicks ()) {
ritorno;
}
6 Controllare la "Old Time" contro il tempo di esecuzione della SDL. Se il frame rate desiderato è "1", il framerate sarà uguale 1.000 millisecondi. Pertanto, una volta "0 + 1.000" è inferiore a "SDL_GetTicks", significa un secondo di fotogramma è passato. Ripristinare il "oldtime" per l'ora corrente.
7 Mettere l'animazione in azione con la creazione di un nuovo oggetto "CAnimation" in "CApp.h:"
CAnimation Animate;
8 Impostare il "MaxFrames" aggiungendo il seguente codice "CApp_OnInit" e regolando il numero "MaxFrames" alle proprie preferenze:
Animate.MaxFrames = 8;
9 Loop l'animazione con il seguente codice aggiungendo a "CApp_OnLoop:"
Animate.OnAnimate ();
10 Animarla aggiungendo questo codice per "CApp_OnRender:"
CSurface :: OnDraw (Surf_Display, Surf_Test, 290, 220, 0, Animate.GetCurrentFrame () * 64, 64, 64);