Get the Mytodolist Free Android app from SlideME.

lundi 6 mai 2013

4/ Boucle de mise à jour, la base de toute animation 3D avec JMonkeyEngine

                Maintenant que vous savez comment charger les actifs, tels que les modèles 3D, vous pourez mettre en œuvre un gameplay qui utilise ces actifs. Dans ce tutoriel, nous allons faire une petite animation avec la méthode simpleUpdate.





Exemple de code


package jme3test.helloworld;
 
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
 
/** Sample 4 - how to trigger repeating actions from the main update loop.
 * In this example, we make the player character rotate. */
public class HelloLoop extends SimpleApplication {
 
    public static void main(String[] args){
        HelloLoop app = new HelloLoop();
        app.start();
    }
 
    protected Geometry player;
 
    @Override
    public void simpleInitApp() {
 
        Box b = new Box(Vector3f.ZERO, 1, 1, 1);
        player = new Geometry("blue cube", b);
        Material mat = new Material(assetManager,
          "Common/MatDefs/Misc/Unshaded.j3md");
        mat.setColor("Color", ColorRGBA.Blue);
        player.setMaterial(mat);
        rootNode.attachChild(player);
    }
 
    /* This is the update loop */
    @Override
    public void simpleUpdate(float tpf) {
        // make the player rotate
        player.rotate(0, 2*tpf, 0); 
    }
}

Faite un build et exécuter le code, vous verrez un cube en constante rotation.

Comprendre le code

Par rapport à nos exemples de code précédents, vous remarquerez que la géométrie en mouvement est désormais un champ de classe. C'est parce que nous voulons que la boucle de mise à jour soit en mesure d'accéder et de transformer cette géométrie. Comme d'habitude, on initialise l'objet à bouger dans la méthode simpleInitApp ().
Jetez un coup d'oeil de plus près à la méthode simpleUpdate () - c'est la boucle de mise à jour.


  • player.rotate (0, 2 * TPF, 0)  fait la rotation de l'objet joué.
  • Nous utilisons la variable TPF ("temps par trame») pour rythmer l'action selon le nombre d'affichage par défaut par seconde. Cela signifie simplement que le cube tourne à la même vitesse sur des machines rapides et lents, et le jeu reste jouable. (le jeu n'est plus dépendant de la performance du pc )
  • Quand le jeu tourne,  la méthode rotate() est exécutée encore et encore en boucle pour donner l'effet de rotation continue.




Utilisation de la boucle de mise à jour

                Un objet en rotation est juste un simple exemple. Dans la boucle de mise à jour, vous avez généralement de nombreux tests et diverses actions de jeu en exécution. C'est là que vous mettez à jour le score et des points de santé, vérifier les collisions, font que des ennemis calculent leur prochain déplacement, jouer des sons ambiants aléatoires, et bien plus encore.

  • La méthode simpleUpdate () commence à s'exécuter après que le simpleInitApp () ait initialisé le graphe de scène et les variables d'état.
  • JME3 exécute tout dans la méthode simpleUpdate () à plusieurs reprises, aussi vite que possible.
    • Utilisez la boucle pour interroger l'état du jeu et ensuite engager des actions.
    • Utilisez la boucle pour déclencher des réactions et mettre à jour l'état du jeu.
    • Utilisez la boucle à bon escient, car un trop grand nombre d'appels dans la boucle ralentit également le jeu.

Initialisation - Mise à jour - Rendu

Notez le contraste:

  • La méthode simpleInitApp () est exécutée une seule fois, dès le début;
  • La méthode simpleUpdate() s'exécute à plusieurs reprises c'est à dire en boucle, pendant le jeu.
  • Après chaque mise à jour, le moteur jmonkeyengine  redessine automatiquement (ou fait un rendu à ) l'écran pour vous!
                        Le rendu est automatique, l'initialisation et la mise à jour sont les deux concepts les plus importants pour vous dès maintenant. Ces méthodes sont là où vous chargez et créer des données de jeu (une fois), et (à plusieurs reprises) modifier leurs propriétés afin de mettre à jour l'état du jeu:

  • simpleInitApp () est "première respiration" de l'application.
  • simpleUpdate () est le battement du coeur de l'application.
L'unité de temps de mise à jour est appelée ticks.
                Tout ce qui se passe dans un jeu se fait lors de l'initialisation ou lors de la boucle de mise à jour. Cela signifie que ces deux méthodes évoluent très longuement dans le temps. Il existe deux stratégies que les développeurs expérimentés utilisent pour étendre leurs codes d'initialisation et de mise à jour sur plusieurs classes Java:
  • Déplacer les blocs de code de la méthode simpleInitApp () pour AppStates.
  • Déplacer les blocs de code de la méthode simpleUpdate () pour les contrôles personnalisés.

Gardez cela à l'esprit pour plus tard quand votre application sera assez lourde.

Exercices

Voici quelques choses d'amusantes à essayer:
  • Qu'est-ce qui se passe si vous donnez à rotate() des nombres négatifs de la méthode?
  • Pouvez-vous créer deux géométries côte à côte, et de faire l'une tourner deux fois plus vite que l'autre? (utiliser la variable TPF)
  • Pouvez-vous faire un cube qui palpite? (augmente et diminue)
  • Pouvez-vous faire un cube qui change de couleur? (changer et régler le matériel)
  • Pouvez-vous faire un cube qui roule? (rotation autour de l'axe x, et une translation le long de l'axe z)


Relisez de nouveau le tutoriel 2/ Créer vos scènes 3D avec les noeuds et géométries , si vous ne vous souvenez pas des méthodes de transformation de redimensionnement, de projection et de rotation.

Solution http://jmonkeyengine.org/wiki/doku.php/jm3:solutions







Conclusion

Maintenant que vous écoutez sur la boucle de mise à jour «, le battement de coeur » du monde de jeu, vous pouvez y ajouter toutes sortes d'action pour en créer.

             La prochaine chose dont un jeu a besoins c'est une interaction! Nous verrons pour la prochaine fois comment faire interrargir les bases de l'interraction entre joueur et le jeu.


<<< Précédent                                    Sommaire                        Suivant >>>>





Aucun commentaire:

Enregistrer un commentaire