PDA

Ver la versión completa : Dudillas sobre eficiencia



Eskema
26/12/2008, 13:39
Buenas gente, estoy aqui dandole vueltas a un tema de optimizacion y no veo cual de las 2 opciones que tengo sea las adecuada.

Tenemos un juego y cada mapa se almacena en un array 2d, usea mapa[10][30] por ejemplo.
Yo tengo esos mapas como fichero.h, es decir cada mapa es un mapa1.h, mapa2.h,etc,etc. De esta forma se compilan e integran en el source y a la hora de dibujarlos en el juego tan solo hago un dibuja (mapa1[10][30]);
En total tengo 2megas de mapas en ficheros.h, ahora la cosa es q me han comentado de sacar los mapas del .h y ponerlos como .dat o lo q sea, crear un unico array en el source mapaglobal[maxmapaX][maxmapaY] que este vacio, y luego con una funcion ir leyendo el mapa.dat y pasarlo a este mapaglobal[][], asi en cada pantalla que cargue leeria el mapa.dat correspondiente y lo cargaria en el mapaglobal[][] ahorrando asi teoricamente memoria.
¿Esta seria la forma mas correcta de hacerlo o existen otras formas?, ¿vale la pena codificar esas funciones, o tal cual lo tengo y por 2 megas que uso no vale la pena?

Saludos,

swapd0
26/12/2008, 14:47
Si pones los mapas en un fichero separado (.dat) puedes añadir facilmente nuevos niveles.

Segun he entendido, lo de tener un mapa global que fuera tan grande como el mayor de los mapas me parece un poco chapuza, es mejor leer en la cabecera del mapa (.dat) el tamaño que tiene y crear el mapa segun se necesite

Eskema
26/12/2008, 15:00
Me he explicado como el culo de mal xDD, a ver he dicho mapa[maxmapaX] por poner algo, no pq vaya a declarar el array como maxmapa y perdemos memoria ;)
Entonces no tendria mucho sentido cargar un mapa de forma externa si luego voy a desperdiciar memoria poniendo maxmapaX.

La cuestion es si realmente vale la pena cargarlos de forma externa, si el ahorro es tan interesante para hacerlo, pq el juego es cerrado usea q no se pueden añadir mapas ni retocar los existentes a nivel usuario (es lo q tienen los resident evil XD)

hardyx
26/12/2008, 15:00
Ten en cuenta que lo que metas en el código del programa ocupará memoria aunque no lo uses. Dejándolo como ficheros de datos sólo usarás de memoria el mapa que cargues en ese momento. Depende de si vas necesitar todos los datos en un corto periodo de tiempo o puedes cargarlos poco a poco. Pero si el mapa es pequeño la carga va a ser muy rápida. Ese espacio que liberas lo puedes usar para cargar otros datos como sonidos, música, estructuras de IA, árboles, etc.

swapd0
26/12/2008, 21:56
En en cuenta otra cosa, si los tienes en un fichero .h y cambias algo, se tendran que compilar todos los ficheros que incluyan ese fichero .h y si el juego es grande puede tardar bastante.

Yo siempre creo que es mejor hacer las cosas bien, aunque tardes mas, que hacer algo que "solo" funcione...

Yota_
26/12/2008, 22:13
No es solo por eficiencia (hablando de los recursos que consume en la actualidad), sino pensando en futuros, además de facilitarte muchas cosas el tener los mapas por separado. El incluirlo como has hecho es útil cuando es algo pequeño, y fijo. Cuando uno comienza con programación, es siempre bueno tener en cuenta la modularidad del programa.

kiwoore
27/12/2008, 09:14
1a) Te ahorras en memoria todo el código embebido que haces uso en el .h
1b) Te ahorras tener en memoria estatica X mapas, tendrás 1 solo mapa (en tu caso 1 array) en memoria dinámica.
1c) Tardarás más en cargar cada nivel ya que en cada transicón de nivel tendrás el añadido en leer de fichero.
2) El parser de .dat te facilitará el crea nuevos niveles. Podrás ponerte la estrctura de fichero que quieras :P
3) Es más elegante de calle xD

Te toca decidir si te sale a cuenta, dependerá de la cantidad de niveles que tengas, el tamaño y el so de recursos que tengas por nivel.
También tiene relación las ganas que le pongas xD

Eskema
27/12/2008, 09:57
tomo nota y modificare todo para cargar los mapas por separado :) todo lo q sea ahorrar memoria siempre es bueno