Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Es Normal Esto

Iniciado por javiel, 10 de Agosto de 2004, 01:43:31 PM

« anterior - próximo »

javiel

 Vamos a ver si me podéis ayudar. Mi juego en algunos ordenadores va increiblemente lento. Es un juego de 2D de naves, una cosa normal, pero lo que pasa es que en ordenadores con menos de 256 mg de ram, me va lento. He estado mirando lo que ocupa el juego al cargarlo, y en un pentium 3 a 1000 con 196 mg de ram, el rendimiento está al 2% y al cargar el juego se me pone asl 100% del tirón y me va lento. En uno con las mismas caracteristicas pero con 256 mg de ram, me va del 2% al 86%, y el juego me va bien.

Quiero decir que soy principiante en esto de los juegos y esto tiene toda la pinta de que mi código sea un poco chungo (o muy chungo).

Yo lo que hago es cargar todos las imágenes de la fase y la música en memoria y después pues la voy mostrandos y moviendo cuando sea necesario. Vienen a ser unas 300 imágenes en forma png y una música en búcle .ogg de unos 20 segundos y diferentes sonidos (disparos y mas). Todo puede ocupar unos 8 megas en disco, y los cargo en memoria pq son necesarios. Tampoco creo que sean demasiadas naves ni nada de eso lo que pasa que cada nave tiene diferentes frames, y diferentes posiciones.

¿es normal que estos 8 megas, al cargarlo en memoria me pille tanto de rendimiento? Supongo que además de esto SDL meterá algo más, y despues tiene que ejecutar el juego y todos los valores que necesita, pero me parece un poco exagerado.

Seguro que estoy haciendo algo mal, y supongo que sin el código no me podréis ayudar mucho, pero a lo mejor se os ocurre algo o me podéis orientar. El código son 11.000 líneas por ahora, así que tampoco creo q tengáis muchas ganas de leerlas. Está hecho en C++ con SDL y parece que no muy bien :blink:

gracias a todos  
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

ethernet

 yo antes de mirar la ram, miraria los drivers de la grafica, y la grafica, umh, aunque no se si realmente estas usando aceleracion... usas opengl? o directamente pintas con las funciones de SDL?

te recomendaria que hicieras un profiling para ver que es lo q "tarda"

Lessman


javiel

 Tengo una parte de opciones donde le pongo si quiero ir por Hardware o por Software. Y en los dos me va igual de lento.

A LESSMAN

En el *pegado* de las imágenes en pantalla, al ser archivos PNG, no puedo utilizar DisplayFormat. Supongo que te refieres a eso cuando hablas de pegar las imágenes con el formato de la pantalla. No lo puedo hacer pq las partes transparentes de la imagen me las pone en negro al hacer eso, y no he conseguido solucionarlo. Cada vez que utilizo DisplayFormat, la imagen me sale como un churro, pero si hago el pegado directo me sale perfecto, sabiendo que esto ocupa más a la hora de dibujar.


A ETHERNET

La gráfica creo que está bien en los ordenadores que lo he probado. Es más en el ordenador que me iba lento, tiene una nVidia de 32 mg, mientras que en el otro que iba bien, es un portatil y tiene una tarjeta no muy buena y no es 3D.

No utilizo OpenGL, ¿crees que esto me puede solucionar la papeleta? y si es así ¿que tendría que hacer exactamente?? De todas formas mi juego es en 2D, ¿mejoraría el rendimiento?

No te entiendo con lo de "profiling", ¿que es exactamente eso? Como se lo que tarda


gracias por vuestras respuestas
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

ethernet

 No, no me referia que usaras opengl, simplemente lo preguntaba. De cualquier forma instala un driver actualizado de la tarjeta grafica.
profilear es la accion de saber cuanto tiempo del total de tu la ejecucion de tu programa gasta una funcion, asi como las llamadas a estas y demas
Podrias colgar el juego para que alguien mas lo pueda testear y hacer de betatester :)
un saludo.  

Lessman


Zaelsius

 Vigila las peticiones de memoria que haces, no sea que se te haya escapado un new() o similar en algun bucle.

Como te han dicho ya, utiliza algun "profiler", o simplemente mira cuanta memoria consume tu programa desde el admin. de tareas.

Pogacha

 Te aconsejo usar LOGs, (sin ellos no haces nada), en cada funcion agregas lineas que tiren datos de la misma a un unico archivo,( tiempo, memoria ocupada, numero de cosas que hizo), ejecuta el programa una vez y te vas a encontrar con cosas que no sabias, pero si no haces esto sera muy dificil que encuentres el problema. Despues de todo lo que buscas es optimizar el codigo.

Por otro lado, no esta mal que al cargar ocupe 100% de recursos, esto depende de como el sistema administra los recursos, lo que importa es el tiempo de demora y el golpe de carga (total porcentual de tiempo que el ordenador se "tilda") es proporcional a el tamaño de la carga e inversamente al tamaño de la memoria.
Si haces que cargue 100 mb de un archivo, de un tirón, el tiempo de carga sera minimo pero el golpe sera el maximo, si en cambio lo asignas a una tarea (thread) de windows seteado en normal, y en cada llamada cargas un archivo distinto o cargas archivos hasta tantos megas o tanto tiempo de demora, el tiempo de carga se agranda enormemente, pero el golpe es muy bajo, veras en algunos juegos el famoso:

Cargando : [ ooooooooooooo........... ]

En el cual se procura bajar el golpe liberando un 25 o 30 % del tiempo para permitir a windows hacer sus cosillas, y permitir cancelar la carga.


Lo que mas me preocupa es que requieras 256 mb para un juego de naves en 2d.
¿Acaso usas un mpeg para las estrellas de fondo?.
Tendrias que fijarte en el codigo y optimizar memoria y demas.
Te puedo aconsejar:
Liberar memoria no utilizada excepto cuando puedes usar bufferes, en vez de alojar memoria y destruirla para volver luego a alojarla.
No cargar archivos de texto como si fueran binarios, (en serio!!!, fijate bien!)
Tratar de cargar archivos binarios solamente, no cargar ascii del 3ds o cosas así.

Saludos

Lord Trancos 2

 Ten en cuenta que aunque el ordenador tenga 256mb de RAM el SO y el resto de programas pueden estar comiendosela toda y a ti solo te quede memoria pajera de esa.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Pogacha

 Muy cierto, y cuando lo ejecutas desde el compilador este tambien comera recursos memoria, si es en modo debug tambien quitará rendimiento.

javiel

 Bueno dandole vueltas al tema del blit, como deciis, puede ser que el formato de los archivos PNG no sean el mismo que el de la pantalla, es mas no son el mismo. El problema era que al utilizar SDL_DisplayFormat, la parte transparente del PNG me la dejaba en negro. Entonces en encontrado SDL_DisplayFormatAlpha (mas info en http://sdldoc.csn.ul.ie/sdldisplayformatalpha.php) y me lo hace perfecto.

Estoy ejecutando el juego en Linux, y en el HardInfo me dice la memoria que está consumiendo. Mi ordendador tiene 650 mg, por lo que va sobrao. El HardInfo tiene una barra que me dice el consumo de memoria. Cuando ejecuto el juego normal, el de toda la vida, la barrita se llena, pero cuando ejecuto el juego con el código nuevo (con el SDL_DisplayFormatAlpha para la imágenes) el consumo es mucho mayor. Mi inglés es bastante chungo, pero en la info de la funcion dice que está función ayudará a que el pegado sea mucho más rápido.

¿tiene que ver todo esto de la memoria con la velocidad del juego?? Supongo que si, pero lo del pegado más rápido sera mas util.

Bueno, lo compilaré en windows y veré a ver que pasa con los dos ordenadores que comentaban antes, a ver si con el cambio de formato de las imágenes me va mejor, aunque no me da a mi que vaya a ir mejor

gracias a todos
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

javiel

 bueno lo acabo de compilar en windows en mi ordenador, el de 650 mg (que lio dios).

Bueno, cuando ejecuto el antiguo (el que no hace el cambio de formato de las imágenes igual al de la pantalla) me consume 110 mg de memoria el juego en total, y cuando lo hago con el nuevo (con el cambio de formato) me consume 200 mg de memoria

¿esto es normal?? Le hago el cambio de formato y en memoria ocupa mas


Bueno, mañana lo pruebo en los otros ordenadores

Muchas gracias por vuestra ayuda, me estáis ayudando mucho y hacer entender un poco mejor todo esto. Aunque creo que todavía me queda mucho mucho mucho

saludos y gracias de verdad
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

egf

 pos yo no es que sepa mucho pero 300 imagenes en png con trasparencias cargadas en la ram es una barbaridad, no me parece tan raro que vaya tan mal

ethernet

 Si no las usa todas el SO ya las cacheara convenientemente

tewe76

 
Citarpos yo no es que sepa mucho pero 300 imagenes en png con trasparencias cargadas en la ram es una barbaridad, no me parece tan raro que vaya tan mal
50*50*4*300/1024/1024=2,86102294921875, o sea, que no llega a 3 MB
(pixelsX*pixelsY*RGBA*numImagenes pasado a MB, creo que no me he equivocado, ¿no?)

PS: Dice que es un juego 2D de naves, así que imagino que la mayoría de las imágenes será tipo sprite, de 50x50 ó 100x100 como mucho
Tewe
www.TAPAZAPA.com : Funny and easy to play games for all ages! - Fairy Match - Brain Crash
www.LaRebelionDelBiberon.com : Experiencias de unos padres primerizos






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.