Amb el nou DrawManager, carregar una imatge es tan senzill com:
TextureInfo *perico = drawManager->Load("prueba.png");
Internament controle si la imatge s'ha de carregar desde arxiu, desde un arxiu de recursos like faig en el Arounders, o desde on siga. Després, per a pintar l'imatge:
perico->Draw(xd, yd, wd, hd, xs, ys, ws, hs, angle);
On xd, yd, wd i hd son les coordenades de l'imatge al destí (al donar un ample i un alt es pot escalar al gust) i xs, ys, ws i hs son les coordenades de l'imatge a l'origen (per a agafar el tile que interese), i angle es l'angle de rotació. Use PNGs i així la transparencia ja ve fixada en l'arxiu. Molt cómode. A més, tambe permet fer espill invertint les coordenades de l'oritge.
Si es vol fer un fade desde negre, pos:
drawManager->FadeIn();
I per al fade a negre igual pero amb FadeOut. Els fades son asincrons, o siga, que se li diu que el faça pero l'execució i pintat de l'escena continua com si res. Per al fadein no importa, pero el fadeout es sol fer al acavar, pel que despres de ordenar el fadeout, i abans de finiquitar, s'ha de comprovar que no estiga encara fent-se. Per a tal cosa he preparant un mètode que ens diu si s'està fent un fade (o el que siga):
if (exitSignal && !drawManager->Working()) exit = true;
Per suposat, quan acavem de pintar l'escena hem de fer el tipic:
drawManager->Flip();
Respecte al teclat, primer hem de actualitzar-lo:
exit = !inputManager->Update();
Aquest mètode torna false si s'ha pulsat el botó de tancar finestra, pel que es deu controlar per a actuar consequentment, sino no es podrà tancar la finestra amb l'aspa.
Una vegada actualitzat el teclat, nomes tenim que comprovar si la tecla pertinent està polsada:
if ( inputManager->IsUp() ) y-=2;
He preferit fer comprovacions genèriques (si s'ha pulsat la tecla o botó del pad que siga asignada a anar amunt) que no específiques (si s'ha polsat la tecla de cursor amunt) per a que el codi quede mes boniquet. Per suposat, la clase tindrà un mètode per a comprovar si s'ha polsat qualsevol tecla. Pero les comprovacions genèriques estàn per a les tecles usuals, que a més podràn ser configurades amb un mètode del tipus:
inputManager->SetUp(SDLK_UP);
On SDLK_UP es el codi de la tecla (en aquest cas correspon al cursor amunt).
La música es igual de senzilla. Un mètode per a carregar, altre per a play altre per a stop i poc més.
Amb açò es pot fer quasi qualsevol jailgame. Al pròxim post parlaré de tota la infrastructura que hi ha per baix per a poder programar un joc sense preocuparse de tot el voltant. Un bucle de joc simple, amb un sprite que no para de rotar, que pots moure amb els cursor, i que comença amb un fadein i acava amb un fadeout quedaria mes o menys així (la indentació no es veu be, pero com es un codi molt simple...):
void GameController::Go(GameInfo *pGameInfo)
{
bool exit = false; // Acavar el bucle principal
bool exitSignal = false; // Senyal de que l'acavada es imminent
int angle = 0; // Angle de gir de l'sprite
gameInfo = pGameInfo; // Info del joc, ja ho explicaré
int x = 0; // Coordenada x del sprite
int y = 0; // Coordenada y del sprite
TextureInfo *perico = drawManager->Load("prueba.png"); // Carreguem el dibuix
drawManager->FadeIn(); // Començarem amb un fadein
while (!exit) {
exit = !inputManager->Update();
if ( inputManager->IsUp() ) y-=2;
if ( inputManager->IsDown() ) y+=2;
if ( inputManager->IsLeft() ) x-=2;
if ( inputManager->IsRight() ) x+=2;
if ( inputManager->IsESC() ) {
exitSignal = true;
drawManager->FadeOut();
}
perico->Draw(x, y, 32, 32, 0, 0, 32, 32, angle);
drawManager->Flip();
angle+=2;
if (angle == 360) angle = 0;
if (exitSignal && !drawManager->Working()) exit = true;
}
gameInfo->estado = ESTADO_SALIR;
}
Prou simple, no?
A vore .. per tal de poder anar compilant coses i anar fent proves like amb els manuals de basic de l'spectrum ... que necesite per a poder anar tirant? Es el que hi ha a la wiki?
ResponEliminaAixí almenys deixe l'entorn preparat per anar fent cosetes. Per suposat el primer sería fer la clasica pilota que rebote per pantalla o es moga ('moc moc') a les ordres del pad o teclat.
Per cert, estic rejugant-me el Starcraft (ara que el tinc en formato descargable) per anar fent camí al 2 :)
ResponEliminaAh, i si, tens rao. En eixir-se'n de la rutina es quan menys temps tens de fer les coses que sols fer en els huequets que traus del dia a dia.
ResponElimina