Stratos: Punto de Encuentro de Desarrolladores

¡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 - kodiak

#1
Programación gráfica / Fondo En Sdl
02 de Octubre de 2003, 06:33:57 PM
Cita de: "kodiak"
Cita de: "samsaga2"Estas volviendo a cargar la imagen en cada frame? No me extraña que te vaya lento entonces. La opcion buena es la segunda que pones, si te fallo de acceso a memoria es que estas haciendo algo mal (a lo mejor cargas bien la imagen pero le envias al blit el puntero que no toca).
Pues no hago nada raro, hago el load_sprite() que devuelve un puntero a SDL_Surface y lo asigno al puntero fondo, y después me da el fallo. Pongo aquí el código de loadsprite y drawsprite(q por cierto ya hacía el blitz  (nooo) ) que saqué de un tutorial.

SDL_Surface *load_sprite(const char *filename)
{
   SDL_Surface * tmp, *bmp;
   Uint32 color_key;
   tmp=SDL_LoadBMP(filename);
   if(!tmp) return 0;
   color_key=SDL_MapRGB(tmp->format, 0, 0, 0);
   SDL_SetColorKey(tmp, SDL_SRCCOLORKEY|SDL_RLEACCEL, color_key);
   bmp=SDL_DisplayFormat(tmp);
   SDL_FreeSurface(tmp);
   if(!bmp) return 0;
   return bmp;
}


// Dibuja un sprite en screen
void draw_sprite(SDL_Surface *screen, SDL_Surface *sprite, int x, int y)
{
   SDL_Rect rect;
   rect.x=x;
   rect.y=y;
   SDL_BlitSurface(sprite, 0, screen, &rect);
}



Y eso, que no entiendo porqué da el fallo de acceso a memoría. Saludos y muchas gracias.
He hecho otra función para cargar el fondo(pero sin hacer las transparencias)  y ya no me da error de acceso a memoria, y me va bien. Gracias.
#2
Programación gráfica / Fondo En Sdl
25 de Septiembre de 2003, 01:50:04 AM
Cita de: "samsaga2"Estas volviendo a cargar la imagen en cada frame? No me extraña que te vaya lento entonces. La opcion buena es la segunda que pones, si te fallo de acceso a memoria es que estas haciendo algo mal (a lo mejor cargas bien la imagen pero le envias al blit el puntero que no toca).
Pues no hago nada raro, hago el load_sprite() que devuelve un puntero a SDL_Surface y lo asigno al puntero fondo, y después me da el fallo. Pongo aquí el código de loadsprite y drawsprite(q por cierto ya hacía el blitz  (nooo) ) que saqué de un tutorial.

SDL_Surface *load_sprite(const char *filename)
{
   SDL_Surface * tmp, *bmp;
   Uint32 color_key;
   tmp=SDL_LoadBMP(filename);
   if(!tmp) return 0;
   color_key=SDL_MapRGB(tmp->format, 0, 0, 0);
   SDL_SetColorKey(tmp, SDL_SRCCOLORKEY|SDL_RLEACCEL, color_key);
   bmp=SDL_DisplayFormat(tmp);
   SDL_FreeSurface(tmp);
   if(!bmp) return 0;
   return bmp;
}


// Dibuja un sprite en screen
void draw_sprite(SDL_Surface *screen, SDL_Surface *sprite, int x, int y)
{
   SDL_Rect rect;
   rect.x=x;
   rect.y=y;
   SDL_BlitSurface(sprite, 0, screen, &rect);
}



Y eso, que no entiendo porqué da el fallo de acceso a memoría. Saludos y muchas gracias.
#3
Programación gráfica / Fondo En Sdl
24 de Septiembre de 2003, 03:14:08 AM
Cita de: "samsaga2"Si que es usando la funcion Blit. Asegurate hacer un SDL_DisplayFormat para optimizar las superficies (se nota mucho el cambio de velocidad).
Lo hago, el código es más o menos así: (load_sprite hace un DisplayFormat() )

.
.
.

SDL_BlitSurface(load_sprite("fondo.bmp"),NULL,screen,NULL);
draw_sprite(screen, load_sprite("bola.bmp"), x, y);
draw_sprite(screen, load_sprite("pala.bmp"), pala1x, pala1y);
draw_sprite(screen, load_sprite("pala.bmp"), pala2x, pala2y);
.
.
.


si hago
SDL_Surface *fondo=load_sprite("fondo.bmp");
main()
{
.
.
SDL_BlitSurface(fondo,NULL,screen,NULL);
draw_sprite(screen, load_sprite("bola.bmp"), x, y);
draw_sprite(screen, load_sprite("pala.bmp"), pala1x, pala1y);
draw_sprite(screen, load_sprite("pala.bmp"), pala2x, pala2y);
....

me da un fallo de acceso a memoria   
      
#4
Programación gráfica / Fondo En Sdl
21 de Septiembre de 2003, 11:30:03 PM
 ¿Qué rutina hay que usar para poner un decorado en SDL? Yo tanto usando la que uso para mostrar sprotes normales como usando SDL_BlitzImage() , se me relentiza muchísimo. Todo ello sin scroll, solo para poner decorado a un pong.  
#5
 era usando SDL_Delay(milisegundos)

con 2 milisegundos creo q ya aceptable en cualquier máquina. Gracias por constestar.
#6
 Bueno, uso c y SDL, y los .exe al ejectuarse en distinatas máuinas, en las q son rápidas va mucho más rápido y vic3ecersa. Sé que la soluciñon será usar las funcioner timer de SDL, pero ¿Alguien me puede orientar?
#7
Programación gráfica / Algoritmo De Colisión De Una Bola
08 de Agosto de 2003, 10:15:23 PM
 He programado un clon del pong, usando c y SDL. La colisión de la bola la he hecho de forma que si se encuentra con la "pared" o las palas, cambia de signo sus dos componentes de velocidad(x e y).

Como comprendereis, esto aunque funciona, limita mucho el movimiento, siempre hace las mismas trayectorias diagonales. ¿alguien me podría recomendar cómo optimizar este algoirtmo, o dónde puede encontrar información?

Muchas 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.