Logo

¡Bienvenido a Stratos!

Acceder

Foros



Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - javiel

#16
Programación gráfica / Foco de luz en 2d usando OpenGL
31 de Marzo de 2007, 02:01:38 PM
gracias por vuestras respuestas.

Lo del tema del poner el círculo negro, es una posiblidad pero no se si hay soluciones mejores

Lo del tema que comenta fran ¿podías ortientarme un poco mejor sobre tus dos propuestas? Un poco más de información si no te importa para poder estudiarlas

muchas gracias
#17
Programación gráfica / Foco de luz en 2d usando OpenGL
30 de Marzo de 2007, 04:09:16 PM
La verdad que no se si esto facilita usar opengl, pero bueno

Lo que estoy intentando hacer es en un mapa cualquier poder poner un poco de luz para que se vea sólo una parte del mapa y la otra parte quede oscura. Pongo una imagen para que veais mas claro lo que quiero hacer



La cosa es que cuando te muevas por el mapa la luz irá cambiando. No se si tengo que iluminar la escena con OpenGL, no se si tendría que hacer una especie de máscara, la verdad que no tengo ni idea de como plantearme el problema. Además el juego va en isométrico y no se si cambia bastante de lo que he puesto.

Otra cosa es que además del mapa tengo los paneles del juego, donde estás los puntos y más datos. No se si la luz afectaría también a esta parte

La verdad que tengo muchas dudas. ¿alguien me podría orientar mas o menos para saber por donde tengo que buscar información?

gracias
#18
entoces es imposible hacerlo así directamente ¿no?

tendré que crearme yo mismo el orden de los sprites

gracias y un saludo
#19
Programación gráfica / ...
28 de Marzo de 2007, 12:39:21 PM
Bueno, gracias, ya he conseguido que me funcione lo del DEPTH, pero se me ha traido otro problema

Yo tengo dos texturas que son pngs transparentes. Cuando le pongo el DEPTH la parte transparente me la pone como el color de fondo.

Pongo un par de imágenes. Esta es cuando le pongo el depth, los transparentes no salen pero puedo ordenar con el indiceZ:



Esta es quitando el depth, puedo ordenar con el indiceZ pero no me salen las partes transparentes



A ver si doy con esto, pq es que no puedo

Muchas gracias. Pongo el código de nuevo con el indiceZ


typedef struct
{
   GLuint texture;
   int w, h;
   int w_or, h_or;
   int posx, posy;
   int indiceZ;
} Textura;

Textura tex1, tex2;


SDL_Surface *LoadTex(char *filename, Textura *tex)
{
   //Uint8 *rowhi, *rowlo;
   //Uint8 *tmpbuf, tmpch;
   SDL_Surface *image, *temp;
   int i, j;

   //image = SDL_LoadBMP(filename);
   temp = IMG_Load(filename);
   if ( temp == NULL ) {
       fprintf(stderr, "Unable to load %s: %s\n", filename, SDL_GetError());
       return(NULL);
   }
   
   tex->w = 512;
   tex->h = 512;
   Uint32 saved_flags;
   Uint8  saved_alpha;
 
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
     image = SDL_CreateRGBSurface(SDL_SWSURFACE, tex->w, tex->h, temp->format->BitsPerPixel,
                                 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);
#else
     image = SDL_CreateRGBSurface(SDL_SWSURFACE, tex->w, tex->h, temp->format->BitsPerPixel,
                                 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
#endif

   /* Save the alpha blending attributes */
   saved_flags = temp->flags&(SDL_SRCALPHA|SDL_RLEACCELOK);
   saved_alpha = temp->format->alpha;
   if ( (saved_flags & SDL_SRCALPHA)
      == SDL_SRCALPHA )
   {
   SDL_SetAlpha(temp, 0, 0);
   }
   
int colorkey = SDL_MapRGB(temp->format, 255, 0, 255);
SDL_SetColorKey(image, SDL_SRCCOLORKEY, colorkey);
SDL_FillRect(image, 0, colorkey);
   
   SDL_BlitSurface(temp, 0, image, 0);
   
   /* Restore the alpha blending attributes */
   if ( (saved_flags & SDL_SRCALPHA)
      == SDL_SRCALPHA )
   {
   SDL_SetAlpha(temp, saved_flags, saved_alpha);
   }


   tex->w_or = temp->w;
   tex->h_or = temp->h;

   SDL_FreeSurface(temp);
   return(image);
}

void LoadGLTextures(void)
{
   
   SDL_Surface *surf;
   
   surf = LoadTex("circulo.png", &tex1);
   if (!surf) {
       SDL_Quit();
   }
   
   tex1.posx = 320;
   tex1.posy = 240;
   tex1.indiceZ = -2;

   glGenTextures(1, &tex1.texture);
   glBindTexture(GL_TEXTURE_2D, tex1.texture);

   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // scale linearly when image bigger than texture
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // scale linearly when image smalled than texture

   glTexImage2D(GL_TEXTURE_2D, 0, 4, surf->w, surf->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surf->pixels);
   glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
   
   
   surf = LoadTex("alien.png", &tex2);
   if (!surf) {
       SDL_Quit();
   }
   
   tex2.posx = 315;
   tex2.posy = 235;
   tex2.indiceZ = -1;

   glGenTextures(1, &tex2.texture);
   glBindTexture(GL_TEXTURE_2D, tex2.texture);
   
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // scale linearly when image bigger than texture
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // scale linearly when image smalled than texture

   glTexImage2D(GL_TEXTURE_2D, 0, 4, surf->w, surf->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surf->pixels);
   glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);    

};

void InitGL(int Width, int Height)
{
   glViewport(0, 0, Width, Height);
   LoadGLTextures();
   glEnable(GL_TEXTURE_2D);
   glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
   glClearDepth(1);
   glDepthFunc(GL_LESS);
   glEnable(GL_DEPTH_TEST);


   glShadeModel(GL_SMOOTH);
   
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(0, Width, Height, 0, 0, 100);    
   
   glMatrixMode(GL_MODELVIEW);
   
}

/* Dibujar textura */
void DrawGLTexture(Textura *tex)
{
   glPushMatrix();
         
   glEnable(GL_TEXTURE_2D);
   glEnable(GL_BLEND);
   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //GL_ONE_MINUS_SRC_ALPHA

   //glColor4ub(255,255,255,100);

   glBindTexture(GL_TEXTURE_2D, tex->texture);
   
   
   glTranslatef(tex->posx, tex->posy, tex->indiceZ);  
   
   
   
   float relW = (float)tex->w_or/(float)tex->w;
   float relH = (float)tex->h_or/(float)tex->h;

 
   glBegin(GL_QUADS);
     glTexCoord2f(0.0f, relH);
     glVertex2f(-tex->w_or/2, tex->h_or/2);      
     glTexCoord2f(relW, relH);
     glVertex2f(tex->w_or/2, tex->h_or/2);
     glTexCoord2f(relW, 0.0f);
     glVertex2f(tex->w_or/2, -tex->h_or/2);
     glTexCoord2f(0.0f, 0.0f);
     glVertex2f(-tex->w_or/2,-tex->h_or/2);
   glEnd();  
   
   glDisable(GL_BLEND);
   glDisable(GL_TEXTURE_2D);
   
   glPopMatrix();
}

void DrawGLScene()
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
   glLoadIdentity(); // Reset The View

   DrawGLTexture(&tex2);
   DrawGLTexture(&tex1);

   SDL_GL_SwapBuffers();
}

int main(int argc, char **argv)
{  
 int done;
 Uint8 *keys;

 /* Initialize SDL for video output */
 if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
   fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
   //exit(1);
 }

 /* Create a 640x480 OpenGL screen */
 if ( SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL ) {
   fprintf(stderr, "Unable to create OpenGL screen: %s\n", SDL_GetError());
   SDL_Quit();
   //exit(2);
 }

 /* Set the title bar in environments that support it */
 SDL_WM_SetCaption("Prueba OpenGL", NULL);

 /* Loop, drawing and checking events */
 InitGL(640, 480);
 done = 0;
 int speed = 1;
 while ( ! done ) {
   DrawGLScene();

   /* This could go in a separate function */
   { SDL_Event event;
     while ( SDL_PollEvent(&event) ) {
       if ( event.type == SDL_QUIT ) {
         done = 1;
       }

       if ( event.type == SDL_KEYDOWN ) {
         if ( event.key.keysym.sym == SDLK_ESCAPE ) {
           done = 1;
         }
       }
     }
       
   }
 }
 SDL_Quit();
 return 1;
}
#20
Llevo mucho tiempo comiendo el coco con esto y es que no me sale. A ver si me podéis ayudar por favor. Tengo muy pocos conocimientos de OpenGL y empecé a trastearlo hace un tiempo y ahora vuelvo de nuevo.

La cosa es que estoy haciendo un juego en 2D pero usando opengl con SDL. La cuestión es que uso proyección ortogonal y quiero usar la profundidad de los elementos para poder ordenar los sprites.

La cosa es que uso glTranslatef, y cuando le paso en el último parámetro el indice Z, si no es 0, no me sale el sprite.

Estoy haciendo un montón de pruebas pero no puedo. Creo que es algo con el glEnable(GL_DEPTH_TEST), pero es que no doy con la tecla. A lo mejor no es ni eso

¿alquien me puede orientar más o menos para saber lo que hacer?

Coloco a continuación un código con el que estoy probando para ver si os orienta un poco

Se que es un poco rollo leer el código, pero os agradezco mucho vuestra ayuda

muchas gracias de antemano


#ifdef WIN32

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

#endif

#if defined(__APPLE__) && defined(__MACH__)

#include <OpenGL/gl.h>   // Header File For The OpenGL32 Library

#include <OpenGL/glu.h>   // Header File For The GLu32 Library

#else

#include <GL/gl.h>   // Header File For The OpenGL32 Library

#include <GL/glu.h>   // Header File For The GLu32 Library

#endif

#include "SDL.h"

#include <SDL_image.h>

#include <stdlib.h>





typedef struct

{

   GLuint texture;

   int w, h;

   int w_or, h_or;

   int posx, posy;

} Textura;



Textura tex1, tex2;





SDL_Surface *LoadTex(char *filename, Textura *tex)

{

   //Uint8 *rowhi, *rowlo;

   //Uint8 *tmpbuf, tmpch;

   SDL_Surface *image, *temp;

   int i, j;



   //image = SDL_LoadBMP(filename);

   temp = IMG_Load(filename);

   if ( temp == NULL ) {

       fprintf(stderr, "Unable to load %s: %s\n", filename, SDL_GetError());

       return(NULL);

   }

   

   tex->w = 512;

   tex->h = 512;

   Uint32 saved_flags;

   Uint8  saved_alpha;

 

#if SDL_BYTEORDER == SDL_BIG_ENDIAN

     image = SDL_CreateRGBSurface(SDL_SWSURFACE, tex->w, tex->h, temp->format->BitsPerPixel,

                                 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);

#else

     image = SDL_CreateRGBSurface(SDL_SWSURFACE, tex->w, tex->h, temp->format->BitsPerPixel,

                                 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);

#endif



   /* Save the alpha blending attributes */

   saved_flags = temp->flags&(SDL_SRCALPHA|SDL_RLEACCELOK);

   saved_alpha = temp->format->alpha;

   if ( (saved_flags & SDL_SRCALPHA)

      == SDL_SRCALPHA )

   {

   SDL_SetAlpha(temp, 0, 0);

   }

   

   int colorkey = SDL_MapRGB(temp->format, 255, 0, 255);

   SDL_SetColorKey(image, SDL_SRCCOLORKEY, colorkey);

   SDL_FillRect(image, 0, colorkey);

   

   SDL_BlitSurface(temp, 0, image, 0);

   

   /* Restore the alpha blending attributes */

   if ( (saved_flags & SDL_SRCALPHA)

      == SDL_SRCALPHA )

   {

   SDL_SetAlpha(temp, saved_flags, saved_alpha);

   }





   tex->w_or = temp->w;

   tex->h_or = temp->h;



   SDL_FreeSurface(temp);

   return(image);

}



void LoadGLTextures(void)

{   

   

   SDL_Surface *surf;

   

   surf = LoadTex("circulo.png", &tex1);

   if (!surf) {

       SDL_Quit();

   }

   

   tex1.posx = 320;

   tex1.posy = 240;



   glGenTextures(1, &tex1.texture);

   glBindTexture(GL_TEXTURE_2D, tex1.texture);



   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // scale linearly when image bigger than texture

   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // scale linearly when image smalled than texture



   glTexImage2D(GL_TEXTURE_2D, 0, 4, surf->w, surf->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surf->pixels);

   glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);

   

   

   surf = LoadTex("alien.png", &tex2);

   if (!surf) {

       SDL_Quit();

   }

   

   tex2.posx = 315;

   tex2.posy = 235;



   glGenTextures(1, &tex2.texture);

   glBindTexture(GL_TEXTURE_2D, tex2.texture);

   

   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // scale linearly when image bigger than texture

   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // scale linearly when image smalled than texture



   glTexImage2D(GL_TEXTURE_2D, 0, 4, surf->w, surf->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surf->pixels);

   glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);    



};



void InitGL(int Width, int Height)

{

   glViewport(0, 0, Width, Height);

   LoadGLTextures();

   glEnable(GL_TEXTURE_2D);

   glClearColor(0.0f, 0.0f, 1.0f, 0.0f);

   //glClearDepth(1.0);

   //glDepthFunc(GL_LESS);

   //glEnable(GL_DEPTH_TEST);



   glShadeModel(GL_SMOOTH);

   

   glMatrixMode(GL_PROJECTION);

   glLoadIdentity();

   glOrtho(0, Width, Height, 0, 0, 1);    

   

   glMatrixMode(GL_MODELVIEW);

   

}



/* Dibujar textura */

void DrawGLTexture(Textura *tex)

{

   glPushMatrix();

   

   glEnable(GL_TEXTURE_2D);

   glEnable(GL_BLEND);

   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //GL_ONE_MINUS_SRC_ALPHA
   
   //glColor4ub(255,255,255,100);



   glBindTexture(GL_TEXTURE_2D, tex->texture);

 

   glTranslatef(tex->posx,tex->posy,0);  



   float relW = (float)tex->w_or/(float)tex->w;

   float relH = (float)tex->h_or/(float)tex->h;



 

   glBegin(GL_QUADS);

     glTexCoord2f(0.0f, relH);

     glVertex2f(-tex->w_or/2, tex->h_or/2);      

     glTexCoord2f(relW, relH);

     glVertex2f(tex->w_or/2, tex->h_or/2);

     glTexCoord2f(relW, 0.0f);

     glVertex2f(tex->w_or/2, -tex->h_or/2);

     glTexCoord2f(0.0f, 0.0f);

     glVertex2f(-tex->w_or/2,-tex->h_or/2);

   glEnd();  

   

   glDisable(GL_BLEND);

   glDisable(GL_TEXTURE_2D);

   

   glPopMatrix();

}



void DrawGLScene()

{

   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      // Clear The Screen And The Depth Buffer

   glLoadIdentity();            // Reset The View



   DrawGLTexture(&tex2);

   DrawGLTexture(&tex1);



   SDL_GL_SwapBuffers();

}



int main(int argc, char **argv)

{  

 int done;

 Uint8 *keys;



 /* Initialize SDL for video output */

 if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {

   fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());

   //exit(1);

 }



 /* Create a 640x480 OpenGL screen */

 if ( SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL ) {

   fprintf(stderr, "Unable to create OpenGL screen: %s\n", SDL_GetError());

   SDL_Quit();

   //exit(2);

 }



 /* Set the title bar in environments that support it */

 SDL_WM_SetCaption("Prueba OpenGL", NULL);



 /* Loop, drawing and checking events */

 InitGL(640, 480);

 done = 0;

 int speed = 1;

 while ( ! done ) {

   DrawGLScene();



   /* This could go in a separate function */

   { SDL_Event event;

     while ( SDL_PollEvent(&event) ) {

       if ( event.type == SDL_QUIT ) {

         done = 1;

       }



       if ( event.type == SDL_KEYDOWN ) {

         if ( event.key.keysym.sym == SDLK_ESCAPE ) {

           done = 1;

         }

       }

     }

       

   }

 }

 SDL_Quit();

 return 1;

}
#21
ArtFutura / ....
17 de Septiembre de 2006, 06:44:55 PM
ethernet. Es verdad lo del tema de los scripts para la aparición de enemigos es cosas que se debería haber hecho desde el principio.

Yo no tengo experiencia en esto de videojuegos y esto lo empezamos hace 2 años y medio para hacer una cosa entre colegas. A los pocos meses entró cluezz y ya se empezó a liar. Yo nunca había hecho un videojuego y hice cosas de las que no me enorgullezco en el código. Luego me planteé rehacer el código en muchas partes, pero preferí dejarlo como estaba para gastar ese tiempo en otros proyectos, ya que creía que no merecía la pena. Sólo cambié el código cuando realmente me parecía que me iba a ayudar en el futuro

Por supuesto, ahora haría muchas cosas de otra manera, tampoco es que tenga mucha experiencia (nada más bien comparado con todos ustedes), pero si me lo plantería de otra forma. En su momento creí que así estaba bien, y posiblemente no es el mejor código, pero mas o menos funciona

saludos

PD: pondré sólo el códgo por separado, ya que tienes razón, a lo mejor hay gente interesada en verlo y para que bajarse los 30 megas de datos

gracias
#22
ArtFutura / ...
15 de Septiembre de 2006, 12:06:32 PM
hay un problema que en muchos ordenadores te pide "libpng12.dll", y la que está es "libpng13.dll"

Ya está arreglado. Te lo puedes bajar otra vez, o mejor vete al directorio de instalación del juego y renombra la dll y ya está

saludos
#23
ArtFutura / Actualización del proyecto en artfutura
15 de Septiembre de 2006, 08:50:48 AM
Hola a todos:

Esta semana hemos mandado el proyecto a artfutura y hemos tenido un problema. Lo que hemos mandado da un error en algunos ordenadores, y no nos hemos dado cuenta hasta ahora que lo hemos subido a internet. Sabemos como solucionarlo, y nos gustaría reenviar el CD con el juego para no tener problemas

He leído por ahí que se pueden hacer actualizaciones, pero en la web de artfutura no lo veo. ¿se puede hacer? ¿que tengo que hacer?

gracias a todos. Es muy urgente ya que estamos a lo justo
#24
ArtFutura / ....
15 de Septiembre de 2006, 12:13:18 AM
bueno, pues ya sabéis quien era el grafista. Ahí está el tío jejeje

Gracias por vuestros comentarios colegas

por cierto, que bien habla el cluezz este
#25
ArtFutura / Super-Tirititran: el superhéroe gaditano
14 de Septiembre de 2006, 03:38:30 PM
Hola a todos:

Bueno, nosotros somos 3 gaditanos que hemos hecho un juego en 2d, llevamos ya bastante tiempo con el, y como lo hemos casi terminado en estas fechas, hemos decidido mandarlo a ArtFutura. El juego se llama Super-Tirititran y es como los juegos de naves antiguos pero ambientado en la ciudad de Cádiz. Tampoco esperéis gran cosa.

Es nuestro primer juego y no se si el último, y espero que os guste

Podéis bajarlo tanto para windows como para linux en:

http://supertirititran.sourceforge.net/

Todo el juego está hecho con software libre. Hemos usado Gimp y Blender para el tema gráfico (a lo mejor conocéis al grafista del foro de 3dpoder) y SDL como librerias para el desarrollo del juego, todo en Ubuntu y Guadalinex.

Algunos screenshot:







Y también podéis ver el video que hemos mandado a artfutura aqui

http://www.youtube.com/watch?v=Xtt-9lZWIZU

Esperamos que os guste y que lo critequéis un poco, no con mucha dureza que es la primera vez que hacemos algo de esto

saludos
#26
General Programadores / Enlazar Librerías En Linux
22 de Abril de 2006, 11:18:51 AM
 Hola:

Estoy intentando crear una versión estática para linux de mi juego, pero no puedo hacerlo. Lo estoy haciendo creando un directorio "libs" con las librerías que uso (que son SDL) e intentando exportar la variable LD_LIBRARY_PATH. La verdad que creo que no es la mejor opción, pero por ahora creo que es lo más rápido.

La cosa es que estoy usando una versión LIVECD de una distro llamada "Kanotix" y no puedo exportar la variable.

Pongo:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/directorio_libs

y cuando pongo

echo $LD_LIBRARY_LIB

no me sale nada.

Lo raro es que si pongo

export HOLA=hola

y pongo luego

echo $HOLA

si sale, y me escribe "hola". No se que puede estar pasando. A ver si alguien me puede ayudar

gracias por todo y un saludo
#27
Off-topic / Sobre Blues & Jazz
29 de Marzo de 2006, 09:22:06 AM
 Mi experiencia con este tipo de música es que hay que ir poco a poco. De nada vale intentar escuchar Charlie Parker del tirón porque te puedes agobiar. Por ejemplo empezar con Jamie Cullum que ahora está de moda, está muy bien, ya que empiezas hacer oido con eso. No se si es tu caso, pero bueno. Te pongo un par de cosillas:

Jazz: Juan Carlos Jobim,  Joshua Redman

Blues: Roben Ford, Discos antiguos de "Los del Tonos"

Bueno, a lo mejor podemos descubrir algo nuevo, ¿que os gusta a vosotros?
#28
General Grafistas / Graficos Cartoon
15 de Marzo de 2006, 09:23:55 AM
 no se si es esto lo que buscas

http://www.melissaclifton.com/tutorial-popart.html

a ver si te sirve

un saludo
#29
Programación gráfica / Canal Alpha En Sdl
08 de Marzo de 2006, 09:26:14 AM
 Te voy a poner como lo hago yo. Yo lo uso pq cuando tengo un SDL_Surface creado de un PNG, si tiene partes transparentes, no puedo usar SDL_SetAlpha. Así que creo un sdl_Surface_copy, el pongo un color cantoso (255, 0, 255) y luego lo elimino con SetColorKey, y ya está.

El único problema es cuando tienes partes semitransparente, como por ejemplo sombras, que se ve el color ese un poco. Eso problema lo arreglé un poco hace un tiempo, pero no encuentro el código.

Bueno a ver si esto te ayuda

 
SDL_Surface* sdl_surface_copy = SDL_CreateRGBSurface (aux->flags,
  aux->w, aux->h, aux->format->BitsPerPixel,
  aux->format->Rmask, aux->Gmask,
  aux->format->Bmask,
  0);
int colorkey = SDL_MapRGB(sdl_surface_copy->format, 255, 0, 255);
SDL_FillRect(sdl_surface_copy, NULL, colorkey);
SDL_SetColorKey(sdl_surface_copy, SDL_SRCCOLORKEY, colorkey);

SDL_BlitSurface(aux, NULL, sdl_surface_copy, NULL);
SDL_SetAlpha(sdl_surface_copy ,SDL_SRCALPHA,alpha);
SDL_BlitSurface (sdl_surface_copy, &src, superficie_pantalla, &dest);


superficie_pantalla, es el screen de la pantalla para ya "pegarlo" en ella

saludos
#30
General / Anunciada La Pyweek 2
04 de Marzo de 2006, 12:48:54 PM
 
CitarPD: ¿Sabeis si hay algún proyecto donde estén haciendo una máquina virtual o, más directo, un compilador de Python? Su única desventaja es que es totalmente interpretado.

No se si te refieres a esto, pero con Py2exe puedes crear ejecutables para windows

http://www.py2exe.org/

en linux normalmente todas las distros vienen con python así que no hay problema

saludos





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.
Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.