Étape 3: La classe Camera
Maintenant nous allons faire un autre détour et mis en place la classe Camera. La classe Camera assure le suivi d’où le joueur se trouve dans le plan 2D et prend également en charge de la mise à jour de la position du joueur. Pour ce faire la classe mettra en œuvre KeyListener, alors elle devra importer KeyEvent et KeyListener.
De nombreuses variables sont nécessaires pour garder une trace de position de la caméra et ce qu’il peut voir. Pour cette raison, le premier segment de la classe ressemble à ceci :
xPos et yPos sont l’emplacement du joueur sur la carte 2D qui a été créé dans la classe de jeu. xDir et yDir sont le x et y des composantes d’un vecteur pointant dans la direction, le joueur est confronté. xPlane et yPlane sont également le x et y des composantes d’un vecteur. Le vecteur défini par xPlane et yPlane est toujours perpendiculaire au vecteur de direction, et qu’il pointe vers la plus éloignée du champ de vision de la caméra sur un côté. La plus éloignée de l’autre côté est juste le vecteur du plan négatif. La combinaison du vecteur et le vecteur de plan définit ce qui est dans le champ de vision de la caméra. Les valeurs booléennes sont utilisés pour garder une trace de quelles touches étant utilisées par l’utilisateur afin que l’utilisateur peut déplacer la caméra. MOVE_SPEED et ROTATION_SPEED dictent comment rapidement la caméra se déplace et tourne pendant que l’utilisateur est en appuyant sur la touche correspondante.
Suivant est le constructeur. Le constructeur prend des valeurs qui indiquent la classe où la caméra se trouve et ce qu’il voit et affecte à la variable correspondante (PosX, Posy...).
Un objet camera est nécessaires dans le programme final, alors allons-y et add-on. Dans la classe de jeu avec toutes les autres déclarations de variables ajouter dans
et dans le constructeur ajouter dans
Cet appareil fonctionne avec la carte que j’utilise, si vous utilisez une carte différente ou si vous voulez commencer à un endroit différent ajustez les valeurs de xPos et yPos (4 et 6 dans mon exemple). À l’aide de.66 donne ce que je ressens est un bon champ de vision, mais vous pouvez ajuster la valeur pour obtenir un champ de vision différent.
Maintenant que la classe Camera possède un constructeur nous pouvons commencer à ajouter des méthodes à suivre les entrées de l’utilisateur et mettre à jour la position/orientation de la caméra. Étant donné que la classe Camera implémente KeyboardListener elle doit disposer de toutes les méthodes d’elle mis en place. Eclipse devrait automatiquement vous invite à ajouter ces méthodes. Vous pouvez laisser la méthode keyTyped vide, mais les deux autres méthodes seront utilisées. keyPressed définira les valeurs booléennes true lorsque les clés correspondantes sont pressés et keyReleased va changer leur retour à false lorsque les clés sont disponibles. Les méthodes ressemblent à ceci :
et
Maintenant que la classe Camera est garder une trace de qui touche nous pouvons commencer à mettre à jour la position du joueur. Pour ce faire nous allons utiliser une méthode de mise à jour qui est appelée dans la méthode run de la classe de jeu. Alors que nous y sommes nous allons aller de l’avant et ajouter la détection de collision à la méthode de mise à jour en passant de la carte à elle lorsqu’elle est appelée dans la classe de jeu. La méthode de mise à jour ressemble à ceci :
Les parties de la méthode qui commandent le mouvement vers l’avant et en arrière fonctionnent en ajoutant xDir et yDir xPos et yPos, respectivement. Avant que ce mouvement se produit, le programme vérifie si le mouvement va mettre la caméra à l’intérieur d’un mur et ne va pas à travers le mouvement si elle sera. Pour une rotation fois le vecteur et le vecteur de l’avion sont multipliés par la matrice de rotation, ce qui est :
pour obtenir leurs nouvelles valeurs. Avec la méthode de mise à jour terminée on peut maintenant appeler ça de la classe Game. Dans la méthode run de la classe de jeu, ajoutez la ligne suivante du code lorsqu’il est démontré ici
Maintenant que c’est fait nous pouvons enfin passer à la classe finale et calculer l’écran !