Tutorial su SDL a scorrimento laterale

April 3

Tutorial su SDL a scorrimento laterale


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.

istruzione

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);