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!
- simpleInitApp () est "première respiration" de l'application.
- simpleUpdate () est le battement du coeur de l'application.
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