Nous en avons presque terminé avec cette série sur la programmation orientée objet. Dans cet article, nous aborderons le principe de la programmation orientée objet abstraction - c'est-à-dire généraliser un objet - et son utilisation dans le développement de jeux.
Remarque: Bien que ce tutoriel ait été écrit en Java, vous devriez pouvoir utiliser les mêmes techniques et concepts dans presque tous les environnements de développement de jeux..
L'abstraction est le principe de généralisation. Cela nécessite de passer d'une instance spécifique à un concept plus général en réfléchissant aux informations les plus élémentaires et à la fonction d'un objet..
Cela peut sembler un peu étrange, mais nous connaissons déjà le concept d'abstraction. Par exemple, si je prononce le mot "voiture", à quoi pensez-vous? Les chances sont que nous ne pensions pas à la même voiture. Je pensais à une Mustang Boss 302 noire, qui est un exemple spécifique de voiture. Aucun de nous deux n'avait tort parce que le mot voiture est un concept très général de véhicule que nous utilisons pour le transport (ou les loisirs dans mon cas).
Il en va de même pour les jeux vidéo. Les jeux vidéo sont classés en groupes tels que RTS, RPG, Courses, etc. Ces groupes sont tous des concepts généralisés qui décrivent le jeu d'un jeu. StarCraft II, Elder Scrolls V: Skyrim et Need for Speed sont des exemples spécifiques de ces concepts généralisés..
Ainsi, l’abstraction prend de nombreuses instances spécifiques d’objets et extrait leurs informations et fonctions communes pour créer un seul concept généralisé pouvant être utilisé pour décrire toutes les instances spécifiques comme une seule et même solution..
L'abstraction est utile parce qu'elle réduit tout à ses principes les plus fondamentaux. Cela peut aider lors de l'encapsulation de la fonctionnalité d'un objet, car cela peut aider à identifier les informations importantes devant être rendues visibles et les informations sans importance pouvant être masquées..
L'abstraction aide également avec le principe «Ne te répète pas». En prenant ce qu’un groupe d’objets a en commun et en l’abrégeant, nous pouvons éviter le code redondant dans chaque objet, ce qui crée un code plus facile à gérer..
Comme auparavant, utilisons nos trois jeux pour voir des exemples concrets de ce principe en action..
Pour commencer à appliquer l'abstraction aux astéroïdes, réfléchissez à ses objets. Rappelez-vous que les objets pour astéroïdes étaient un navire, un astéroïde, une soucoupe volante et une balle. Maintenant, réfléchissez à ce que chacun de ces objets a en commun. Partagent-ils des états, des comportements ou des fonctionnalités? En prenant ces éléments communs que partagent tous les objets, nous pouvons les résumer en une classe plus généralisée..
Par exemple, un navire, un astéroïde, une soucoupe volante et une balle partagent le même comportement de déplacement sur l’écran. Vous pouvez résumer ce comportement dans une classe abstraite contenant les qualités communes requises pour déplacer un objet. Ces qualités seraient des états tels que position et rapidité, et le comportement de en mouvement.
La classe abstraite en Java pourrait ressembler à ceci:
/ ** * Classe abstraite pour le déplacement * / classe abstraite Movable public float velocityX; vitesse de flottement publiqueY; position flottante publiqueX; position flottante publiqueY; / ** * Function - exécute le comportement (tâche) consistant à déplacer le navire * / public void move () positionX + = velocityX; positionY + = vélocitéY;
Il existe d'autres états, comportements et fonctionnalités communs à tous les objets. Pouvez-vous penser à eux? Ceux-ci peuvent tous être ajoutés dans une classe abstraite.
Une des choses que vous voulez surveiller est la création d’une classe de blob. Une classe blob est une classe qui tente de tout gérer à partir d'un groupe d'objets, même si chaque objet ne partage pas les mêmes états, comportements et fonctionnalités. Ce n'est pas parce qu'un navire et une soucoupe volante peuvent tirer que vous devez classer ce comportement dans la même classe abstraite qui est utilisée pour décrire les quatre objets.
Consultez le didacticiel de Iain Lobb sur la composition d'entités pour savoir comment il évite cette situation..
Comme cela a été dit à maintes reprises, Tetris n’a qu’un seul objet, un Tetrimino. Toutefois, cela n’empêche pas Tetris d’abriter certaines de ses fonctionnalités. Un Tetrimino est dessiné presque de la même manière que le terrain de jeu et les autres visuels du jeu. Cela signifie que vous pouvez résumer ce comportement de dessin dans une classe unique à laquelle appartiennent tous les éléments dessinés à l'écran..
(Personnellement, j'aime appeler une telle classe Drawable
, mais Lutin
est également un nom couramment utilisé.)
Pac-Man est un peu plus intéressant en termes d'abstraction. Pac-Man, un fantôme et un pac-dot ne partagent pas vraiment d'états, de comportements ou de fonctionnalités communs. Ils peuvent être dessinés de la même manière sur l’écran, ce qui permet de créer une classe abstraite de traitement du dessin, mais pas beaucoup plus que cela. Donc que fais-tu? Dans ce cas, il est parfaitement correct de créer plusieurs classes abstraites pour organiser le code..
Commencez par la classe pour gérer le dessin pour les trois objets. Ensuite, retirez le point du groupe car c’est l’objet qui n’appartient vraiment pas aux autres. Cela laisse Pac-Man et un fantôme. Maintenant, réfléchissez à ce que ces deux objets ont en commun et créez une autre classe abstraite pour ces objets. Cette classe pourrait contenir des états tels que direction et la vitesse, et le comportement de en mouvement.
Avec deux classes abstraites, vous réduisez le code redondant qui aurait été nécessaire pour créer les trois objets, et vous le déplacez vers un emplacement pouvant être facilement modifié et modifié..
Le principe de abstraction contribue à réduire le code redondant et à créer un code plus facile à gérer. Cependant, l'abstraction en elle-même ne nous sert à rien si nous ne faisons rien avec les classes abstraites. Pour cela, nous devons en apprendre davantage sur héritage qui sera discuté dans le prochain et dernier article de cette série.
Suivez-nous sur Twitter, Facebook ou Google+ pour vous tenir au courant des derniers messages..