Je crée un jeu similaire à Legend of Zelda: Link to the Past (action-aventure 2D descendante). Je veux que le personnage reste centré sur l'écran quand il bouge.
Actuellement, chaque fois que le joueur veut se déplacer, je déplace toute la carte dans la direction opposée. Cela fonctionne, mais comme j'ajoute plus d'objets au monde, les déplacer devient de plus en plus compliqué.
Y a-t-il une meilleure façon d'aborder cela?
Réponses:
La manière typique de gérer cela est de créer un objet caméra. La forme la plus simple d'une caméra n'est qu'une position. Cette simple caméra définit le "centre" de la vue actuelle. Ainsi, vous ne modifiez pas toutes les positions de vos tuiles / entités, vous soustrayez simplement les coordonnées de la caméra des positions lors du dessin. Dans cette situation, la caméra ne "bouge" pas.
Bien que la caméra et votre personnage partagent une position la plupart du temps, vous pouvez toujours les avoir en tant que valeurs distinctes, vous pouvez donc, par exemple, empêcher la caméra de bouger lorsqu'elle atteint la fin du monde, mais autorisez la joueur de continuer à se déplacer.
Un appareil photo légèrement plus avancé bouge. Toutes les entités et les tuiles sont dessinées sans décalage et la position à partir de laquelle vous effectuez le rendu change. Ceci est très similaire à l'appareil photo le plus basique, et vous pouvez toujours effectuer plusieurs des mêmes optimisations pour le rendu sélectif (en ne faisant appel
draw
qu'à ce que l'appareil photo peut voir), sur les deux. C'est essentiellement juste une façon différente de voir les choses.la source
cam variables
... et a proposé une méthode alternative ... stackoverflow.com/questions/18199373/…Non, ce n'est pas la bonne façon de procéder.
Comment allez-vous faire la détection des pièges? Et quand le joueur atteint les bords des murs? Votre système de visualisation fonctionnera-t-il pour les donjons ou devrez-vous réécrire une partie importante du code?
Le monde est la géométrie. Le joueur est la géométrie. Le monde ne bouge pas. Le joueur le fait. Réglez la position de la caméra pour centrer sur le lecteur. Toujours . Et c'est tout ce qu'il y a à faire.
N'essayez pas de devenir fantaisiste avec "oh si je fais glisser le monde, cela donnera l' apparence que le joueur bouge". Vous allez simplement compliquer les calculs avec des systèmes de coordonnées étranges à la fin de la journée.
Il est vrai que le rendu d'OpenGL fonctionne réellement en «fixant la caméra pour qu'elle pointe vers le bas - z, et en transformant et en faisant pivoter toute la géométrie du monde pour qu'elle tienne dans le volume de la vue canonique», mais vous n'êtes pas censé penser de cette façon lors de la programmation .
gluLookAt
a des paramètres nomméseye
,look
etup
pour une raison - vous pouvez donc penser en termes de système de coordonnées sensible.la source