Ir al contenido

publicidad

Foto

SDL ayuda con el lag


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

  • Cebollo

  • Lord Boros

  • vida restante: 100%
  • Registrado: 07 jul 2003
  • Mensajes: 2.856
#1

Escrito 01 julio 2009 - 23:13

Buenas gente.

Estoy creando un videojuego de naves con SDL y mi idea es alcanzar unas 500 balas en pantalla, sin embargo el framerate se me va por los suelos.

¿Alguien del foro ha trabajado con esta librería?
Algún consejo que podáis darme.
He visto gente que llega a usar más de 1000 imágenes simultáneas en pantalla y le tira bien.

Salu2

  • Ellolo17

  • Ganondorf

  • vida restante: 100%
  • Registrado: 16 nov 2006
  • Mensajes: 6.208
#2

Escrito 02 julio 2009 - 08:48

Buenas.

Yo con esa libreria no he trabajado nunca, pero te diré unos consejos:

*Si las imagenes las tienes en jpg intenta cambiarlas a un formato mas amistoso con los juegos como el bmp, png, tga... Se cargan antes y no dan tantos problemas aunque ocupan algo mas en memoria.

*Optimiza tu codigo lo maximo posible. No se lo buena que será esa libreria para manejar las imagenes pero cuantos menos calculos tenga que hacer con ellas, mas rápido irá.

*¿Son esas 500 balas necesarias? Apuesto a que con 100 ya haces un reto bastante complicado al jugador. Y ten en cuenta que en juegos mas antiguos de naves como el Raptor o alguno de la epoca de los 16 bits no pasaba de 50 imagenes a la vez. Otra cosa es que quieras hacer un Ikaruga o un Mushihimesama, por ejemplo.

*Prueba a usar otras cosillas. Si lo has programado para que cada vez que dispare te cree una imagen y que al colisionar con algo esta imagen desaparezca, estas cargando innecesariamente el ordenador. Prueba al empezar la partida a cargar la nave, el maximo de balas de la nave que pueda disparar. Por ejemplo 50 creo que esta bien y de sobra, unas 10 naves de cada clase que salgan en el mapa y otras 50 balas por cada nave. Esto es un ejemplo, si con esto te va bien, de maravilla. Pues bien, una vez cargado coloca lo que no este en uso fuera de la pantalla y al disparar en vez de crear, coloca la bala en la posicion de la nave y activala para que vaya avanzando, y que al colisionar vuelva a esconderse fuera de la pantalla.

Con todo eso algo debe de mejorar. Mas no puedo ayudarte. De todas formas si pones por aqui algo de codigo en vez de andar con suposiciones podriamos ayudarte mejor.

Un saludo.

#3

Escrito 02 julio 2009 - 21:30

Mira cuantas veces dibujas en e buffer de pantalla.
Cuantas nuevas SDL_Surfaces creas, este tipo de cosas tan costosas.
Mira que no crees 500 balas, sino que una SDL_Surface bala, la dibujes 500 veces en un SDL_Surface buffer usando un blitsurface y al final hagas simplemente un SDL_Flip.

Yo he tocado algo de SDL, porque mi proyecto de graficos de la carrera era OpenGL con SDL, pero de SDL usabamos poquisimo, porque solo lo necesitabamos para Menus.

  • Sante05

  • Methuselah

  • vida restante: 100%
  • Registrado: 21 jul 2001
  • Mensajes: 182
#4

Escrito 03 julio 2009 - 00:04

Siendo nuevo con la librería, lo más probable es que sea algún error de principiante como el que comenta Cloud_1986 de crear 500 superficies en lugar de usar la misma una y otra vez.

Si no es ninguno de esos, asegúrate de que el problema de rendimiento esté en el sistema gráfico, y no en otra parte de tu código como, por ejemplo, la actualización de elementos del juego, gestión de colisiones, etc... por ejemplo, si tienes 500 objetos bala, no deberias reservarlos y destruirlos continuamente según se disparan y desaparecen, sino reutilizar la misma memoria de un objeto muerto asignandola a otro nuevo segun demanda.

Otro par de consejos para SDL: Utiliza siempre superficies con el mismo formato de pixel que el buffer principal, y mantenlas todas en la memoria de hardware.

Si con todo esto no lo sacas, es posible que tengas que meterte a optimizar mas en serio, lo que ya depende mucho de la naturaleza de tu juego (aunque algunas tecnicas genericas pueden ayudar)


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