Ir al contenido

publicidad
publicidad

Foto

Curso MM: 19 Pantalla de presentación


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
No hay respuestas en este tema

#1

Escrito 22 agosto 2009 - 17:48

Añadiendo detalles a tus juegos con una pantalla de presentación

SpaceOut.h , SpaceOut.cpp

La pantalla de presentación debe aparecer una sola vez antes de empezar a jugar. Añadiremos una variable global booleana llamada _bSplash para indicar si debemos mostrarla o no. Las variables globales se inicializan en GameStart(). Ponemos _bSplash = TRUE para indicar que no se puede jugar el juego hasta que se pulse enter y salgamos de la pantalla de presentación. Las funciones GameActivate() y GameDeactivate() deben comprobar esa variable. En GamePaint() comprobamos la variable y así sabemos qué tenemos que mostrar y qué no, por ejemplo mostramos el fondo pero no los sprites. HandleKeys() comprueba la pulsación de enter durante la pantalla de presentación y llama a NewGame() si se ha pulsado, o empieza una nueva partida si acabamos de terminar una.

Veamos las partes más interesantes:

[code:1]void GameActivate(HWND hWindow)
{
if (!_bSplash)
// Si no estamos en la pantalla de presentación continuamos con la música de fondo.
_pGame->PlayMIDISong(TEXT(""), FALSE);
}[/code]

[code:1]void GameDeactivate(HWND hWindow)
{
if (!_bSplash)
// Si no estamos en la pantalla de presentación pausamos la música de fondo.
_pGame->PauseMIDISong();
}[/code]

[code:1]void GamePaint(HDC hDC)
{
// Draw the background
_pBackground->Draw(hDC);

// Draw the desert bitmap
_pDesertBitmap->Draw(hDC, 0, 371);

if (_bSplash)
{
// Si no hemos empezado el juego tendremos que mostrar la pantalla de presentación.
// Así que se verá el fondo y el desierto, pero nada más.
_pSplashBitmap->Draw(hDC, 142, 100, TRUE);
}
else
{
// Si no estamos en la pantalla de presentación mostramos los sprites.
_pGame->DrawSprites(hDC);

// Dibujamos la puntuación.
TCHAR szText[64];
RECT rect = { 460, 0, 510, 30 };
wsprintf(szText, "%d", _iScore);
SetBkMode(hDC, TRANSPARENT);
SetTextColor(hDC, RGB(255, 255, 255));
DrawText(hDC, szText, -1, &rect, DT_SINGLELINE | DT_RIGHT | DT_VCENTER);

// El número de vidas restantes.
for (int i = 0; i < _iNumLives; i++)
_pSmCarBitmap->Draw(hDC, 520 + (_pSmCarBitmap->GetWidth() * i),
10, TRUE);

// Si se ha acabado el juego mostramos el mensaje de fin del juego.
if (_bGameOver)
_pGameOverBitmap->Draw(hDC, 170, 100, TRUE);
}
}[/code]

[code:1]void HandleKeys()
{
...
...

// Empezamos un juego nuevo al pulsar la tecla Enter.
if (GetAsyncKeyState(VK_RETURN) < 0)
if (_bSplash)
{
// Si estamos en la pantalla de presentación la quitamos y llamamos a NewGame()
_bSplash = FALSE;
NewGame();
}
else if (_bGameOver)
{
// Si no estamos en la pantalla de presentación y el juego anterior ha terminado llamamos
// a NewGame() para empezar otra partida.
NewGame();
}
}[/code]

Código fuente


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad
publicidad