Giochi in JME (o come trasformare il vostro telefono in un mini console per videogiochi)

17 Giugno 2010 da Enrique Lascia un commento »

Con la potenza di elaborazione con dispositivi mobili oggi e in particolare i telefoni cellulari, è possibile, con un piccolo sforzo, pazienza e voglia implementare interessanti giochi in Java per i telefoni cellulari.

La "cellula" di oggi è come un computer con un sacco di periferiche integrate tra cui una fotocamera, tastiera, schermo, telefono cellulare, un lettore di memory card esterno, wifi, gps, gsm, ecc E tutto questo nel palmo della vostra mano.

Alcuni di questi dispositivi mobili portano i sistemi operativi proprietari, altri usano una qualche versione di Windows, Linux e Symbian OS. Ma c'è una caratteristica che la maggior parte hanno in comune: Java. Ovviamente non la versione a piena potenza di Java che viene installato sul nostro desktop, portatile o server. Questa è una versione adattata per i dispositivi mobili in cui non vi è alcuna gigabyte di RAM, o più CPU con frequenze di clock dell'ordine di Giga Hetrz.

Sorprendentemente, Java Micro Edition (JME, AKA J2ME) ha le caratteristiche che lo rendono una piattaforma molto interessante per sviluppare applicazioni e soprattutto giochi. E questi ultimi sono quelli che esploreremo.


Prima un po 'di teoria

Dato il numero di dispositivi mobili, tutti con diverse caratteristiche sono state inventate le "profili di competenze" per il profilo MIDP Informazione Mobile Device. A seconda della versione di MIDP, il dispositivo avrà le competenze più o meno: la comunicazione, la presentazione, audio, ecc.

Inoltre MIDP, c'è un'altra specifica chiamata per CLDC Connected Limited Device Configuration, in cui il basso livello funzionalità del dispositivo, per esempio, se avete la possibilità di gestire numero in virgola mobile.

Si basa su CLDC MIDP per formare la piattaforma Java ME. L'idea è di sviluppare sulla piattaforma possono essere più compatibile. Oggi, la maggior parte dei telefoni supportano MIDP 2.0 e CLDC 1.1, ma se ci limitiamo ad una migliore CLDC 1.0. Il Motorola V360 è un esempio di telefono cellulare con MIDP 2.0 e CLDC 1.0.

Poi, quando cominciamo a sviluppare, dobbiamo scegliere quale versione di MIDP e CLDC intenzione di utilizzare. Sul Oracle (http://java.sun.com/javame/technology/index.jsp), è possibile trovare ulteriori informazioni e il SDK (http://java.sun.com/javame/downloads/index. jsp).

Bene, abbiamo l'SDK installato, abbiamo la nostra fiducia IDE configurato. Ora che cosa? Per pianificare! Beh, non così in fretta. Come si fa a programmare un gioco? Questo è qualcosa che abbiamo lo fa da anni, non abbiamo molto chiaro. Internet è un sacco di documentazione, ma il bene è davvero scarsa.

Prima di tutto, vedremo è lo scheletro di una pseudo-game-in:

  processo di input dell'utente
 aggiornamento stato del gioco
 disegno dello schermo
 goto 1

Patrono di computer, mi spiace per il goto.

Non c'è niente di rivelare in queste 4 righe, ma se si può iniziare a vedere alcuni problemi. Ad esempio, il gioco verrà eseguito a velocità diverse a seconda della potenza di cella. Qualcosa evidentemente indesiderabile. Ovviamente vogliamo che il nostro gioco a lavorare presso la stessa velocità su qualsiasi telefono cellulare, indipendentemente dalla potenza.

Per questo, facciamo un piccolo cambiamento:

  processo di input dell'utente
 aggiornamento stato del gioco
 disegno dello schermo
 attendere millisecondi X
 goto 1

    Ora variabile X, si può variare la velocità del gioco. Facile ... giusto? Rimane con l'utente sceglie X, ad esempio, il menu di gioco. Ma X non è stato possibile determinare automaticamente? Meglio ancora, come X non è stato possibile determinare in modo dinamico ad ogni svolta del ciclo? Certo. Ora vediamo:

      ciclos_por_segundo = 30
     milisegundos_por_ciclo = 1000 / ciclos_por_segundo
     t_inicial = ADESSO ()
     processo di input dell'utente
     aggiornamento stato del gioco
     disegno dello schermo
     t_ciclo = ADESSO () - t_inicial
     se (t_ciclo <milisegundos_por_ciclo) allora
         wait (milisegundos_por_ciclo - t_ciclo) millisecondi
     goto 3
    

    Nota: La funzione ADESSO () restituisce l'ora corrente in millisecondi, il che rende qualcosa come System.currentTimeMillis () in Java.

    Cosa avete da fare è prendere il tempo che ci vuole un ciclo completo (4, 5 e 6). Se questo tempo è inferiore alla quantità di tempo stabilito per ogni ciclo di 1 e 2, quindi si aspettano la differenza di tempo. Così, tutti i cicli lo stesso ritardo e il tempo di attesa è regolata dinamicamente.

    In questo modo possiamo eseguire così come tra la potenza cella diversa. Questo metodo può essere migliorato mediante l'attuazione di cicli break (salto fotogramma) quando la cella è una potenza molto bassa, ma corriamo il rischio che il gioco diventa ingiocabile. Così, il gioco più lenta a bassa potenza delle cellule, e che per tutto il tempo sarà consumato nei paragrafi 4, 5 e 6 e non entrare in modalità standby.

    E 'incredibile quante cose interessanti che può essere fatto usando questa semplice tecnica.

    In pratica

    Noi implementare questa tecnica, il "ciao mondo" dei Giochi: PONG uno per uno.

    Pong

    Pong

    E 'come un Arkanoid, ma senza i mattoni. È vero, non molto divertente.

    L'implementazione Java del ciclo principale appare come segue:

      CICLOS_POR_SEGUNDO final int = 30;
     MILISEGUNDOS_POR_CICLO final int = 1000 / CICLOS_POR_SEGUNDO;
     while (true) {
         lunga = tInicial System.currentTimeMillis ();
         procesarEntradaDelUsuario ();
         actualizarEstadoDelJuego ();
         dibujarLaPantalla ();
         lunga = tcycle System.currentTimeMillis () - tInicial;
         se (tcycle <MILISEGUNDOS_POR_CICLO) {
             Thread.sleep (MILISEGUNDOS_POR_CICLO - tcycle);
         }
     }
    

    Si noti che nulla finora è stato fatto in particolare per il PONG. Sarà funzioni particolarmente procesarEntradaDelUsuario (), actualizarEstadoDelJuego () e dibujarLaPantalla ().

    Il primo è incaricato di prendere qualcosa di input dell'utente e il cambiamento nel gioco, in questo caso sarebbe la posizione della palette. Sì, la tavolozza è il rettangolo verde .. deve avere l'immaginazione :-)

    Il secondo deve aggiornare lo stato interno del gioco. In questo gioco, questa funzione ha due obiettivi: a) muovere la palla e b) se la palla va giù, allora il gioco si conclude con il fatidico "Game Over".

    Il terzo e ultimo, si deve prendere lo stato del gioco e disegnare sullo schermo.

    Il codice sorgente può essere scaricato da qui: scr.tar-pong . In questa implementazione, non si perde mai. Quando il pallone scende, si ritrova nel centro dello schermo. Un buon esercizio dovrebbe aggiungere la vita, per aumentare la velocità della palla, dando un'accelerazione alla palette, migliorare la grafica, aggiungere mattoni, suoni, solo per citarne potenziamenti e la commercializzazione (non Arkanoid, chiara :) ) E poi, la fama!

    Buon divertimento!

    Blogger messaggio Digg Reddit Google Reader Quota
    Pubblicità

    Lascia un commento

    Spam protezione da WP Captcha-Free