Comunidad PHPeros
Lenguajes => C / C++ => Mensaje iniciado por: javipilo en 24 de Abril de 2011, 00:18:19 am
-
Bueno, he vuelto al campo de la programación, después de haberme pasado mucho tiempo jugando a LineageII.Y he vuelto nada mas y nada menos que aprendiendo C++, y estaba empezando a crear un juego en SDL. Y me surgió la siguiente duda..
Primero antes que nada, tengo este código que he realizado:
#include "SDL/SDL.h"
void mostrar( int x, int y, SDL_Surface* source, SDL_Surface* destination )
{
SDL_Rect offset;
offset.x = x;
offset.y = y;
SDL_BlitSurface( source, NULL, destination, &offset );
}
void generar_mapa(int x, int y)
{
int i, u;
SDL_Surface* tileset = NULL;
SDL_Surface* pantalla = NULL;
SDL_Surface* buffer = NULL;
pantalla = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);
buffer = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);
tileset = SDL_LoadBMP("tileset.bmp");
for (i = 0; i < y; i++)
{
for (u = 0; u < x; u++)
{
mostrar(u*32, i*32, tileset, buffer);
}
}
SDL_Flip(buffer);
mostrar(0, 0, buffer, pantalla);
SDL_Flip(pantalla);
SDL_FreeSurface(tileset);
}
int main(int argc, char* args[])
{
SDL_WM_SetCaption("Swat2D", NULL);
SDL_Init( SDL_INIT_EVERYTHING );
generar_mapa(10,10);
SDL_Delay(5000);
SDL_Quit();
}
El problema es esto:
SDL_Surface* tileset = NULL;
SDL_Surface* pantalla = NULL;
SDL_Surface* buffer = NULL;
pantalla = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);
buffer = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);
Que está dentro del void de "generar_mapa", y yo quiero usarlo en otro void llamado "refrescar", en resumen, quiero hacer los surfaces tileset, pantalla y buffer globales para que los pueda usa ren otros lados, ¿hay forma de hacerlo?.
Saludos y gracias de antemano.
-
No estoy seguro si de esa forma se puede, pero si trabajaras con programación orientada a objetos y esas funciones fueran métodos, podrías establecer esas variables como atributos de la clase.
-
Como dice Physlet es una forma.
La otra forma es devolver esos SDL_Surface* en la función como valor de retorno (por paso de parámetros) y obtenerlo en el main.
El método es fácil:
En el main declaras tus variables que serán las globales, y a la función le pasas la dirección donde viven esas variables (Son del tipo SDL_Surface **)
SDL_Surface *global1;
SDL_Surface *global2;
generar_mapa(10, 10, &global1, &global2);
Y luego en el otro archivo...
void generar_mapa(int x, int y, SDL_Surface **g1, SDL_Surface **g2)
{
....
*g1 = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);
*g2 = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);
...
}
Saludos!
-
Si ya lo vi en otra web de tutoriales pero no estaba seguro, muchas gracias.
Tengo otras 2 preguntas:
¿Y para cambiar el valor de una variable usando las teclas de movimiento del teclado?
¿Y para que no termine la aplicación y se cierre, que siempre siga activa?
Saludos
-
Pues para que siga activa hasta que se haga cierta acción (como pulsar ESC) es el mismo caso que el movimiento por teclado.
Busca información sobre SDL_Event y como manejarlo.
Saludos