Les outils standards sont fournis par le module lionengine-game
, permettant un développement de jeux équilibré avec des classes standards et une architecture de base.
C'est également la dépendance principale pour les autres modules de jeux spécialisés.
Dans cette section nous verrons comment utiliser ces outils.
Les objets primaires ont été conçu pour êtres le socle de vos réalisations, permettant de se reposer sur une base solide.
Featurable
C'est le principal type d'objet primaire, fournissant les outils essentiels pour tout objet complexe. Il est conçu pour fonctionner avec :
Setup
, peut être utilisé comme paramètre du constructeurL'utilisation de cette classe comme base permettra également de bénéficier du système de
Feature
.Chaque objet est représenté par un fichier de configuration au format XML, permettant ainsi de le paramètre de manière externe.
Setup
Cette classe représente la configuration de base depuis un fichier XML, généralement utilisé pour les
ObjectGame
. Le but de cette classe est de partager des ressources en plusieurs objets, afin de réduire l'utilisation mémoire (comme un sprite par exemple).
Services
C'est le point focal lorsqu'il s'agit de gestion des dépendances. Tout objet aura besoin tôt ou tard d'accéder à des services externes (comme la
Camera
, ou laMapTile
du jeu).Il est ainsi possible d'accéder, dès la construction d'un objet, à des services déclarés préalablement. Il faudra veiller à bien les fournir avant leur utilisation, car en raison du typage faible induit par cette classe, toute erreur d'utilisation produira une exception lors de la demande d'un service inexistant à l'exécution. Pensez donc à bien documenter les services requis par vos objets afin de ne rien oublier !
Il est recommandé de déclarer les services comme suit :
private final Services services = new Services(); private final Factory factory = services.create(Factory.class); private final Camera camera = services.create(Camera.class); private final MapTile map = services.create(MapTileGame.class);
Les services vont êtres créés et ajouté automatiquement au conteneur afin d'être utilisé à l'extérieur.
Camera
Il s'agit là également d'une classe que vous serez amener à utiliser très souvent, puisque celle-ci représente votre point de vue sur le monde que vous aurez créé. Ce sera très probablement l'un de vos premiers service...
Cursor
Cette classe vous permettra de gérer plus précisément le pointeur de la souris de votre système, de manière synchrone ou asynchrone, avec un système de gestion d'images représentant le pointeur.
La Factory
permet de créer des ObjectGame
typés de manière générique à partir d'un fichier de configuration au format XML.
Il est maintenant possible de créer des instances de chaque type, sans réaliser de cast. Assurez-vous juste de garantir la relation entre le type et sa classe cible. Le cas contraire, vous aurez une erreur lors de la création.
Le Handler
permet de gérer plusieurs objets, dans le but de les mettre à jour et de les afficher.
Il est possible d'ajouter et de supprimer des objets à n'importe quel moment.
Les changements seront effectifs à la fin des opérations du gestionnaire.
Vous pouvez maintenant mettre à jour une série d'objet, et les afficher. Les nouveaux objets peuvent êtres ajoutés à n'importe quel moment.
Le WorldGame
est utilisé comme conteneur de jeu principal, plutôt que la Sequence
, car il supporte des
opérations de chargement et de sauvegarde de monde. Son principal objectif est de gérer la logique du jeu, dont l'ordre
de mise à jour et de rendu. Avec une telle classe, la Sequence
est seulement utilisée pour charger un WorldGame
,
le mettre à jour et l'afficher, rien de plus.
Pour montrer les principales caractéristiques, le monde sauvegardera une simple chaine, et la chargera. Il affichera également la chaine chargée à l'écran.
Le seul objet géré par la scène est le monde, en appelant save & load
juste pour montrer le fonctionnement de
base.
Comme vous pouvez le voir, c'est très basique. Mais dès lors que vous ajouterez plus d'éléments (tels que la Map,
Handler
...), il sera plus facile de définir la sauvegarde et le chargement du monde, étant donné que chaque objet
complexe peut être sauvegardé et chargé facilement (MapTile
possède déjà ce type de fonction). Vous
pouvez également implémenter différentes versions d'un monde, et en sélectionner un depuis la Sequence
,
sans rien changer d'autre.
Lire la suite: Jeux en réseaux