Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





J2me. Lentitud En Un Juego

Iniciado por bnl, 05 de Enero de 2006, 09:04:27 PM

« anterior - próximo »

bnl

 Hola, estoy desarrollando un juego para moviles y en los emuladores me va bien de velocidad, pero al pasarlo a un movil (el Nokia 6630) me va lentisimo. Sin embargo en un motorola no me va tan mal. ¿Alguien sabe a que se puede deber?
Gracias
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.


chechocossa

 Optimizar... es decir... hacer un juego para cada cosa  (grrr)

Yo a mi juego lo pruebo en diferentes versiones de emuladores Nokia ( no tengo un móvil de esos ) y en cada versión funciona distinto. Lo mismo ocurre con el emulador mpowerplayer.

En una versión pinta las letras de distintos colores, en otra no me reconoce el RecordStore y siempre me abre uno nuevo, en otra me tira un error de puntero nulo que aún no encuentro... en fin.

Este párrafo lo saqué de un hilo en el foro de GameLab, es una frase de John Carmack sobre el tema:

Write-once-run-anywhere. Ha. Hahahahaha. We are only testing on four platforms right now, and not a single pair has the exact same quirks. All the commercial games are tweaked and compiled individually for each (often 100+) platform. Portability is not a justification for the awful performance.

creo que eso deja en claro todo esto de la portabilidad en J2ME y móviles  :angry:
ergio Cossa

http://www.fatherjoe.com.ar - Father Joe Mobile
http://www.fantasticzone.blogspot.com - Fantastic Zone Blog
http://www.fantasticzone.com.ar - Fantastic Zone Page
Argentina

bnl

 ¿como lo podria optimizar?
La verdad es que esto es bastante desesperante. Las cosas van en los emuladores (o en alguno al menos) las llevas a un movil y te hace mil cosas raras.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

chechocossa

 Yo empezaría mirando el bucle principal.

Seguramente tengas un Thread.sleep o algo parecido para obtener los ciclos por segundo deseados...

En esta página tenés infinidad de información sobre los Nokia y móviles en general:

Página con info
ergio Cossa

http://www.fatherjoe.com.ar - Father Joe Mobile
http://www.fantasticzone.blogspot.com - Fantastic Zone Blog
http://www.fantasticzone.com.ar - Fantastic Zone Page
Argentina

bnl

 Efectivamente en el bucle principal tengo un thread.sleep (tambien he usado el wait por si el excesivo retardo se debia a eso)
He establecido que el bucle se ejecute una vez cada 80 milisegundos.
El bucle (sin contar el retardo) se ejecuta en bastantes menos milisegundos (20 de media), sin embargo luego el juego va lento en el nokia 6630 y no en un motorola.
Esta muy bien la pagina q me comentas (con el inconveniente de estar en ingles) , ya me habia imprimido y leido bastantes de esos documentos.
¿q podria hacer para optimizarlo y q me fuera mejor?
Chechocossa, si no has podido probar tu juego en algun movil real quiza te lleves una desagradable sorpresa como me ha ocurrido a mi. Son muchas las cosas que no funcionan igual en un emulador q en un movil real.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

chechocossa

 Ya sé que mi juego seguramente no se comporte como se espera en un móvil.
Lo estoy desarrollando para el concurso de Movilgamers y allí exigen que corra en un par de emuladores, así que simplemente pienso optimizarlo para eso. Luego, si el juego interesa, ellos se harán cargo del port al móvil.

Como optimizar, hay de todo. Tendrías que considerar la compresión de las imágenes, el uso de la memoria, etc.

Por ejemplo, yo acostumbro a programar accediendo a propiedades de una clase a través de método del tipo get-set. Cosas de este tipo no están recomendadas para los móviles. Accediéndose directamente a las propiedades, aunque no sea lo ideal de la POO, hace que tu código responda más rápido. Bueno, es un ejemplo.

Es como dice Carmack, un juego para cada dispositivo.

En mi estructura de archivos, yo tengo dispuestas carpetas que contendrán las fuentes para cada dispositivo al cual deba portarlo  :angry:

Yo me copiaría todos tus fuentes a otra carpeta y comezaría a modificarlos, olvidándome de cómo funciona en el Motorola y pensando sólo en el Nokia.
ergio Cossa

http://www.fatherjoe.com.ar - Father Joe Mobile
http://www.fantasticzone.blogspot.com - Fantastic Zone Blog
http://www.fantasticzone.com.ar - Fantastic Zone Page
Argentina

bnl

 Yo tambien lo estoy desarrollando para el concurso, pero aun asi me gustaria q funcionara en mi movil y en los moviles a los que tengo acceso.
El juego no lo habia desarrollado especificamente para el motorola, mas bien estaba pensado para los de las s60 aunque solo tuve en cuante las dimensiones de la pantalla de los s60. ¿Que mas deberia tener en cuenta para que funcionara mejor en la serie 60? ¿que deberia modificar en las fuentes para hacer el juego especificamente para el s60?
En el emulador de la s60 va genial. Pero me estoy dando cuenta de que los emuladores no son demasiado fieles a la realidad...
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

chechocossa

 Pues yo estoy utilizando la API de Nokia y siempre respetando el MIDP 1.0

De la API, lo único que aprovecho por ahora es el FullCanvas y la opción de DirectGraphics que me permite manipular la imagen en espejo y rotación ( lo cual, te aviso, también tiene sus diferencias en los distintos emuladores  (nooo) )

Por el resto... nada distinto a lo que he leído en foros, pdf´s, etc.
ergio Cossa

http://www.fatherjoe.com.ar - Father Joe Mobile
http://www.fantasticzone.blogspot.com - Fantastic Zone Blog
http://www.fantasticzone.com.ar - Fantastic Zone Page
Argentina

bnl

 Quiza el problema no sea de optimizacion (aunque seguro que se podria optimizar bastante) ya que todo el bucle del juego, incluyendo el dibujado en pantalla, se ejecuta en muchos menos milisegundos de los 80 que tengo establecidos que dure el bucle, asi q en cada ciclo le tengo que hacer esperar.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

zupervaca

 Haz que no espere y pruébalo en el móvil, si va bien es problema de que algún calculo de tiempo entre frame y frame no se hace bien y esta esperando mas de la cuenta, si va igual es que pintas mas de lo que soporta el móvil y/o ejecutas muchas instrucciones.
¿Con que móvil de la serie 60 lo estas probando? Si quieres bájate el juego del nosferatu de mi web y pruébalo, debería irte a las 10 fps que esta limitado.

bnl

 Tu juego me va perfecto, muy chulo por cierto.
He probado a quitarle el retardo y tambien he quitado la mayoria de instrucciones de proceso del juego (actulizacion del mundo, enemigos, etc) y va un poco mejor, pero deberia ir super deprisa, de echo en el emulador va rapidisimo.
Me inclino a pensar que el problema este o en el dibujado de las imagenes o quiza que al tener muchas imagenes cargadas en memoria se ralentice.
El jar ocupa solo 60kb  
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

zupervaca

 Lo malo de los emuladores es que no son fíales al móvil físico, no obstante puedes emular la velocidad de un móvil en la configuración del emulador, pero esto ya depende de que emulador uses o en que estes programando.
Los consejos que puedo darte sobre dibujar imágenes son los clásicos, no pintes fuera de la pantalla, crea un doble búfer si no existe, usa el clip para pintar lo justo, procura meter todas las imágenes en una misma imagen, por lo menos las que tengan relación sin pasarte de 256x256 o 128x128 por ejemplo, procura que las imágenes sean múltiplo de 2 y si puedes pinta siempre en coordenadas X pares ya que ira mas rápido.

bnl

 Despues de hacer mil pruebas he llegado a algunas conclusiones.
Parece que el problema esta cuando dibujo las casillas del fondo, estoy utilizando midp2 y la clase TiledLayer
Siguiendo tus consejos y poniendo que las imagenes tengan dimensiones pares he consiguido algo de mejora en la velocidad
Y tambien dibujando en las posiciones pares.
Estoy utilizando el flushgraphics, entiendo que por lo tanto estoy usando doble buffer ¿me equivoco?

He quitado el retardo que hago cada ciclo y aunque ahora me va un poco mejor me sigue yendo lento.
¿Se os ocurre algo mas?
Es curioso, pero en el motorola q se supone q es un movil bastante peor el juego va mas rapido.
Gracias
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

sés

 Comprueba que no estés usando imágenes de 24 ó 32 bits.
Soy indeciso... ¿o no?






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.