Autor Tema: [Ayuda] ¡No se que hacer!  (Leído 2096 veces)

Desconectado javipilo

  • PHPero Experto
  • *****
  • Mensajes: 975
  • Karma: 31
  • Sexo: Masculino
    • Ver Perfil
[Ayuda] ¡No se que hacer!
« 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:
Código: [Seleccionar]
#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:
Código: [Seleccionar]
     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.
« Última modificación: 24 de Abril de 2011, 00:21:51 am por javipilo »

Comunidad PHPeros

[Ayuda] ¡No se que hacer!
« en: 24 de Abril de 2011, 00:18:19 am »

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:[Ayuda] ¡No se que hacer!
« Respuesta #1 en: 24 de Abril de 2011, 01:19:16 am »
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.

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[Ayuda] ¡No se que hacer!
« Respuesta #2 en: 24 de Abril de 2011, 01:35:01 am »
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 **)

Código: [Seleccionar]
SDL_Surface *global1;
SDL_Surface *global2;

generar_mapa(10, 10, &global1, &global2);

Y luego en el otro archivo...

Código: [Seleccionar]
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!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado javipilo

  • PHPero Experto
  • *****
  • Mensajes: 975
  • Karma: 31
  • Sexo: Masculino
    • Ver Perfil
Re:[Ayuda] ¡No se que hacer!
« Respuesta #3 en: 24 de Abril de 2011, 12:49:36 pm »
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
« Última modificación: 24 de Abril de 2011, 13:13:53 pm por javipilo »

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[Ayuda] ¡No se que hacer!
« Respuesta #4 en: 24 de Abril de 2011, 15:50:03 pm »
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
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es