Programmation Orientée Jeux

Moteur de jeu - Les Pieds

Que sont les 'Pieds' d'un Moteur de jeu ?

Les pieds permettrons au Moteur de communiquer avec le joueur, afin de permettre au joueur de se déplacer dans un environnement, d'interagir avec ce dernier.

1) Le Clavier

D'un point de vue de la programmation, on pourrait caractériser le clavier comme un tableau contenant un nombre de cases égal au nombre de touches, ayant pour valeur un Boolean, qui vaut Vrai lorsque la touche correspondante est pressée, et qui vaut Faux sinon. Il en découle une fonction très simple d'utilisation:

// On suppose l'utilisation d'un tableau de boolean ayant une taille correspondant au nombre de touches
boolean isPressed(int key) {
    if (key >= 0 && key < keyMap.length) {
        return keyMap[key];
    } else {
        return false;
}

Voilà donc comment accéder à l'état d'une touche. Mais encore faut-il que l'état soit mis à jour lorsqu'il y a changement ! En effet, ici, on ne fait que récupérer la valeur d'un tableau, qui pour le moment n'est jamais mise à jour. Il faut donc notifier notre tableau des changements.

Les techniques peuvent varier suivant le langage de programmation utilisé, mais généralement, on peut voir le composant Clavier comme un Évènement qui est notifié des changements des états du clavier (touche pressée, touche relâchée). Cela correspond donc à un Thread en état de sommeil (sleep), attendant une notification (signal). Ce fonctionnement garantit que la mise à jour de l'état du clavier ne consomme pas inutilement le CPU. La mise à jour ne sera faite que si il y a changement d'état pour une touche.

Lorsqu'il y a changement, cet évènement est notifié. Il suffit donc de le récupérer, et d'y lire les informations concernant ce changement (pressé ? relâché ?). Notre classe Clavier effectuera ces mises à jour de manière interne, afin que l'utilisateur n'ai plus qu'à se soucier d'utiliser la fonction boolean isPressed(int key);

Clavier

Concernant l'identification des touches d'un clavier, chaque touche possède un code unique. Évidement, les claviers ne sont pas tous identiques (nombre de touches, organisations des touches ...), mais l'analyse du code (keycode) permet de savoir sur quelle touche on appuie (l'évènement permet notamment d'obtenir, en plus du numéro de touche, son nom (si cela est possible, comme pour les lettres imprimables).

2) La Souris

Pour la souris, le fonctionnement est assez similaire que celui vu précédemment pour le clavier. Cependant, la souris est un poil plus complexe. En effet, qu'est-ce qu'un souris à l'écran ? Une souris (dans un cadre général), comporte:

Ainsi que ses changements d'état:

Il faudra donc, tout comme pour le clavier, traiter ces changements d'état, afin de mettre à jour la structure de la souris. Notre lot de fonctions sera le suivant:

// Retourne vrai si le numero de clic est presse, faux sinon
boolean mouseClick(int click);

// Retourne l'abscisse de la souris sur l'ecran
int getX();

// Retourne l'ordonnee de la souris sur l'ecran
int getY();

// Retourne le delta X de la souris (le mouvement horizontal)
int getMoveX();

// Retourne le delta Y de la souris (le mouvement vertical)
int getMoveY();

Le fonctionnement interne de la souris est assez similaire à celui du clavier, à la différence qu'il faut récupérer les nouvelles coordonnées de la souris. A partir de là, il est possible de calculer le déplacement de cette dernière en effectuant la soustraction de l'ancienne/nouvelle coordonnée.

3) Conclusion

Nous avons pu voir comment communiquer avec le clavier et la souris, et ainsi récupérer et mettre à jour leurs états. De cette façon, il sera facile pour l'utilisateur de détecter l'appui de touches, et les mouvements de souris, par simple appel d'une fonction (le reste étant géré en interne, par le moteur). Voyons avec un petit exemple concret ce que cela pourrait donner:

// On supposera que la constante UP correspond au code de la touche flechee 'Haut'
if (keyboard.isPressed(UP)) {
    print("UP !");
}

Lire la suite: Moteur de jeu - Les Yeux

Programmation Orientée Jeux ©2010-2014
Byron 3D Games Studio