Foros - Stratos

Programadores => Código de la Semana => Mensaje iniciado por: ethernet en 26 de Septiembre de 2006, 07:46:23 PM

Título: Plantilla J2ME - Helius
Publicado por: ethernet en 26 de Septiembre de 2006, 07:46:23 PM
Aprovechando que la programación de juegos para móviles está cada día más presente en stratos y que más gente está interesada en la programación para estos dispositivos, Helius nos manda un código a modo de plantilla para crear un juego en J2ME. Nos hace un pequeño resumen del código:

Citar
Este COTW se trata de una plantilla para juegos sobre J2ME.

La plantilla está estructurada de tal manera que ya existe un thread con un bluce principal en el que se actualiza constántemente la pantalla del móvil.

Aparte, consta de algunas funciones de utilidad para responder al input y la capacidad de detectar si el móvil soporta o no doble buffer, en caso negativo lo realizará de forma manual.

Las funciones más relevantes están en la clase MainCanvas:

- private final static void MAIN_Render(Graphics g)

Aquí es dónde se deben pintar todos los gráficos del juego.


- private final static void MAIN_Loop()

Aquí es donde se debe actualizar toda la lógica del juego.


- private final static boolean INP_KeyDown(int key)

Esta función nos dice si una tecla está pulsada en este momento. Hay que usar las constantes que están definidads al principio de la clase (CONS_KEY_...) como parámetro.


- private final static boolean INP_AnyKeyDown()

Devolverá true si cualquiera de las teclas está pulsada.


- private final static boolean INP_KeyPress(int key)
- private final static boolean INP_AnyKeyPress()

Estas dos son iguales que las anteriores pero sólo devolverán true una vez, hasta que vuelva a soltarse y volverse a pulsar la tecla.


Otra de las características es que está pensada teniendo en cuanta la posibilidad de poder realizar la compilación, tanto para Nokias, como para móviles con MIDP 1 y móviles con MIDP 2, tan sólo cambiando unas directivas de preprocesador.

Si tenéis alguna duda podéis contactarme a través de los foros de Stratos (www.stratos-ad.com).


Código: Plantilla_J2ME (http://www.geardome.com/files/Plantilla_J2ME.zip)


La imagen que general el proyecto:          

(http://www.geardome.com/files/plantilla.jpg)

Otro artículo que puede interesar leer para preparar el entorno es el que escribió zupervaca en su tutoblog:
- Preparándose para programar en j2me (http://www.davidib.com/tutoblog_2006.asp#tuto4)
Esperemos que esto sirva como base para los cursos (http://www.stratos-ad.com/forums3/viewtopic.php?t=7446)  y grupos de iniciación (http://www.stratos-ad.com/forums3/viewtopic.php?t=7400) que se están montando ahora mismo


Código enviado por Nacho Sánchez (Helius), http://www.geardome.com (http://www.geardome.com)



Si quieres enviar un COTW, puedes enviarlo a qualopec@gmail.com o por PM a ethernet.
Título: Plantilla J2ME - Helius
Publicado por: Helius en 26 de Septiembre de 2006, 08:41:35 PM
Aprovecho para aclarar que se trata de un proyecto para Netbeans + Wireless Toolkit. Supongo que cogiendo los dos ficheros .java compilarán sin problemas en cualquier IDE.

Espero vuestros comentarios.

Saludos.
Título: Re: Plantilla J2ME - Helius
Publicado por: Harko en 26 de Septiembre de 2006, 10:28:00 PM
Cita de: "ethernet"Otro artículo que puede interesar leer para preparar el entorno es el que escribió zupervaca en su tutoblog:
- Preparándose para programar en j2me (http://www.davidib.com/tutoblog_2006.asp#tuto4)
Esperemos que esto sirva como base para los cursos (http://www.stratos-ad.com/forums3/viewtopic.php?t=7446)  y grupos de iniciación (http://www.stratos-ad.com/forums3/viewtopic.php?t=7400) que se están montando ahora mismo
Hey! Justo lo que estaba buscando, muchas gracias :D

Harko.
Título: Plantilla J2ME - Helius
Publicado por: sés en 27 de Septiembre de 2006, 08:44:23 AM
Un código estupendo para el que quiera emepzar a trastear con J2ME. Más de uno te lo agradecerá :)
Título: Plantilla J2ME - Helius
Publicado por: Mars Attacks en 28 de Septiembre de 2006, 10:17:28 PM
Yo lo agradeceré :****************
Título: Plantilla J2ME - Helius
Publicado por: Lex en 01 de Octubre de 2006, 03:43:54 AM
...
Título: Plantilla J2ME - Helius
Publicado por: Helius en 02 de Octubre de 2006, 10:03:26 AM
Cita de: "Lex"he podido comprobar lo que tanto me advirtió y no le hice caso
Huir de Java mientras podáis bwahahahaha!!!!  :P
Título: Plantilla J2ME - Helius
Publicado por: TrOnTxU en 05 de Enero de 2007, 06:40:13 AM
Cita de: "Lex"Lo que estaría bien es, hacer la lista de los 1001 trucos y advertencias de J2ME :twisted:

Yo haria la lista de los 1001 problemas y trucos de los móviles.
Comienzo con unos apuntes:
if ( x > 30 ) {
   y = 30;
} else {
   y = x;
}
equivale a esto:
y = (x>30)?(30):(x);
[/list]
Bueno son solo algunas sugerencias que he podido aprender por ahi. Pero la más importante es que si haces un juego de móvil, intenta NO HACER nada más de los imprescindible, perderás tiempo que luego no cobrarás. A no ser que quieras hacerte tus herramientas y tenerlas "pa siempre" o venderlas, etc.

Por cierto, muy bueno el código, gracias por compartir :D

Un saludo!
Título: Plantilla J2ME - Helius
Publicado por: zheo en 05 de Junio de 2007, 06:58:41 PM
Bueno, aprovecho para presentarme en esta vuestra comunidad con un primer comentario.

Ya que se está utilizando el preprocesador de NetBeans, ¿por qué no utilizarlo también para el log?
Es decir, en el método UTIL_OutputDebugString(String str), en vez de tener

if (DEBUG)
{
   System.out.println("DEBUG: " + str);
}

hacer

//#if _DEBUG
  System.out.println("DEBUG: " + str);
//#endif


Es una tontería, pero te ahorras el código del condicional, y una variable.

Por cierto, muy interesante el truco 8 TrOnTxU.
Título: Plantilla J2ME - Helius
Publicado por: sés en 06 de Junio de 2007, 08:36:27 AM
Para NetBeans puedes hacer esto:
//#debug
System.out.println("DEBUG: " + str);


o esto para varias líneas:
//#mdebug
System.out.println("DEBUG: " + str);
//#enddebug



De todas formas no es mala idea el uso de constantes. Ese código lo elimina cualquier compilador si DEBUG==false y no dependes de ningún preprocesador.
Título: Plantilla J2ME - Helius
Publicado por: ethernet en 06 de Junio de 2007, 09:47:58 AM
Cual es la razón por cual cual usas yield y no un sleep para ceder el hilo de ejecución a otro thread?
Título: Plantilla J2ME - Helius
Publicado por: Helius en 06 de Junio de 2007, 04:58:00 PM
Cita de: "ethernet"Cual es la razón por cual cual usas yield y no un sleep para ceder el hilo de ejecución a otro thread?

Pues simplemente por la definición de yield en la documentación:

public static void yield()

Causes the currently executing thread object to temporarily pause and allow other threads to execute.


Pero efectivamente podría usarse sleep(0). De todas formas creo que existían teléfonos que funcionaban mal con sleep y otros que funcionaban mal con yield...  :roll:

Saludos.
Título: Plantilla J2ME - Helius
Publicado por: sés en 07 de Junio de 2007, 09:10:53 AM
Yo siempre uso sleep(0).
Título: Plantilla J2ME - Helius
Publicado por: chechocossa en 07 de Junio de 2007, 01:42:26 PM
La gente que me hace el testing de Padre Carlos, me decía que en algunos Sony las teclas no les respondían correctamente:

"K700i, w550i

Las teclas de d-pad no responden bien. Tienes que sostener la tecla al menos un segundo antes que responda. Funciona bien el menú pero en el juego no.
Las teclas de números no funcionan tampoco. El 4 debe ser izquierda, el 2 arriba, el 6 derecho, etc."


Buscando en un foro de desarrolladores de Sony-Ericsson leí que una de las causas por la falta de respuestas de las teclas, es que hay que incluir el comando yield()
Cuando lo hice, los problemas en esos móviles desaparecieron.

Por eso, una parte de mi loop es:

// Demora para controlar los FPS
           if( loopTime < loopDelay )
           {
               try
               {
                   Thread.sleep(loopDelay - loopTime);
               }
               catch(java.lang.InterruptedException e)
               { }
           }
           else
               Thread.yield();