Dois-je déplacer le monde ou déplacer le joueur?

11

Je suis sur le point de commencer à développer un jeu à défilement horizontal où le but du joueur est de voyager le plus loin possible dans l'axe horizontal avant de toucher le sol. Notez que je n'ai pas besoin de revenir sur l'axe horizontal.

Je développe cela avec AndEngine pour Android qui utilise OpenGL et Box2d.

Avant de commencer, je dois décider quelque chose d'important: dois-je utiliser le monde autour du joueur pour simuler le mouvement ou réellement déplacer le joueur et le suivre avec les fonctionnalités de la caméra du moteur de jeu?

Les deux approches semblent avoir des forces et des retombées différentes, donc je ne sais pas laquelle est la meilleure. Par exemple, qu'est-ce qui faciliterait l'ajout de power-ups en cours de route et un arrière-plan animé agréable?

Merci!

monoceres
la source
2
Déplacez la caméra.
Jonathan Dickinson
1
Sauf si vous avez une raison spécifique de ne pas vouloir utiliser la caméra (qui a déjà été écrite pour vous), vous devez déplacer le lecteur et la caméra. L'ajout de "power-ups" ne devrait en aucun cas être affecté.
Christopher Horenstein

Réponses:

9

Déplacez la caméra (attachée à votre lecteur). J'imagine que votre monde a plusieurs objets tels que des ennemis. Si vous vouliez déplacer le monde, vous devrez parcourir tous ces objets pour mettre à jour leur position à chaque fois que le monde bouge.

Si vous déplacez le lecteur et attachez la caméra au lecteur, l'utilisation des ressources est minimale. Le jeu atteindra sa phase de rendu, parcourra tout une fois comme il le fait à chaque image et les dessinera à la position - camera.position. La position de la caméra sera toujours égale à la position de votre joueur dans ce cas.

Suds
la source
Bien sûr, si les objets sont des ennemis, vous n'auriez pas à les parcourir, ajoutez simplement le mouvement des mondes au leur dans leur méthode de mise à jour.
SirYakalot
1
+1. Utilisez camera.setChaseEntity(player);pour y parvenir.
MartinTeeVarga
6

Je déplace toujours l'appareil photo et je le recommande - il y a plusieurs raisons pour lesquelles je préfère cela, mais la plus importante se résume probablement à ceci:

  1. Si vous déplacez la caméra et le lecteur, ce ne sont que deux entités qui doivent être mises à jour pour faire défiler l'écran.

  2. Si vous déplacez le monde entier chaque fois que l'écran doit défiler, cela englobe un nombre inconnu et peut - être un grand nombre d'entités qui devront être mises à jour.

David Gouveia
la source
Je suis d'accord, mais j'ajouterais que simplement ajouter une ligne + = 'ing le mouvement des mondes à la classe ennemie serait assez trivial.
SirYakalot
@AsherEinhorn Je suppose que vous parlez d'un scénario tel qu'un graphique de scène où chaque nœud partage les transformations du parent et déplacer simplement le nœud racine (c'est-à-dire le "monde") traduirait tout le reste automatiquement? Parce que dans tous les autres cas, déplacer le monde implique de tout déplacer dans le monde - ce qui était le point de mon message.
David Gouveia
bien si le mouvement du monde est inversement proportionnel au joueur. c'est-à-dire - vous avancez, le monde recule, alors vous pouvez simplement - = le mouvement des joueurs vers tous les objets du jeu. Je suis d'accord avec vous, je dis simplement qu'il existe des moyens triviaux de faire fonctionner les deux.
SirYakalot
4

C'est assez banal vraiment, cela ne fait pas vraiment de différence avec les choses que vous avez décrites.

Soit vous déplacez l'arrière-plan devant la caméra et le lecteur, soit vous déplacez le lecteur et la caméra avec lui. Je suppose qu'il y a une chose de moins à faire si vous déplacez simplement l'arrière-plan.

Bien que je suppose que si vous déplacez l'arrière-plan, vous devrez associer des micros et des ennemis à cela, ce qui est encore trivial, mais c'est quelque chose à penser.

Personnellement, je déplacerais le joueur parce que j'aime que les choses soient faites de manière plus réaliste.

SirYakalot
la source
0

D'autres réponses sont bonnes, mais j'aimerais ajouter quelques points de ce qui est mieux, en espérant aider quelqu'un qui essaie de prendre la même décision pour un projet différent.

Déplacer le joueur:

  • C'est simple, tout le reste est statique (ish), donc en termes simplistes, la seule chose que vous devez faire pour déplacer le lecteur est player.x += 5;(pseudocode).
  • Il "clique mieux" pour la plupart des gens. Lorsque vous jouez à un jeu, vous pensez toujours que le joueur bouge, et non l'inverse. Il est donc plus facile de penser à cela comme "Le joueur doit bouger, pas le monde", ce qui, à son tour, peut faciliter l'organisation de la tête de quelqu'un.
  • Facile à suivre où se trouve le joueur (sa position est également ses coordonnées sur la carte)

Déplacer le monde:

  • Si votre jeu est assez grand, vous n'avez pas à vous soucier des débordements / débordements, en vous éloignant trop du centre du monde, car la position du joueur est toujours très proche 0.
  • Comme ci-dessus, si vous vous trompez avec les calculs 3D, vous n'avez pas à vous soucier des résultats inexacts avec des virgules flottantes, car tout ce que vous voyez à l'écran devrait être assez proche 0.
  • Si c'est fait correctement, vous pouvez créer un monde "infini".
  • Vous devez suivre le joueur manuellement, la position du joueur sera toujours une petite valeur, ce qui signifie où le joueur est sur l'écran (un peu), pour savoir si le joueur est en haut à gauche de la carte ou en bas à droite, il faudrait garder une trace de cela d'une manière ou d'une autre.

Au final, cela dépend du projet. Si quelqu'un crée un clone original de Mario, déplacer le monde pourrait être compliqué, alors que déplacer le joueur ne crée pas vraiment beaucoup de problèmes. Voulant faire un énorme jeu en monde ouvert, il peut être préférable de déplacer le monde à la place.

TomTsagk
la source