Les animations Minecraft sont-elles codées en dur dans le jeu? [fermé]

12

Je voudrais savoir comment fonctionne le système d'animation dans minecraft. J'ai l'impression que tous les monstres sont codés en dur dans le jeu. Est-ce que Notch s'est vraiment assis là et a créé les matrices pour tous les os d'animation à la main?

J'aime recréer des jeux pour le plaisir, donc j'aimerais savoir comment il a fait ça. De plus, s'il les code vraiment en dur ... y a-t-il une meilleure façon?

radenon
la source
2
pourquoi pensez-vous qu'il peut avoir des animations codées en dur?
Ali1S232
On dirait que cette question ne peut être répondue que par Notch.
MichaelHouse
9
Plus précisément, pourquoi vous souciez-vous de la façon dont Minecraft l'a fait? Avez-vous une idée sur la façon d'accomplir la même chose d'une autre manière?
Tetrad
1
minecraftforum.net/topic/361430-181smp-smart-moving Le fabricant de ce mod a peut-être une réponse pour vous, mais l'animation n'est pas un domaine du code minecraft que j'ai examiné auparavant.
James
1
J'ai déjà parcouru le code MCP, et je suis sûr à 99% que je me souviens avoir vu les animations codées en dur. Cependant, je n'ai plus de minecraft (ni même d'Eclipse) à vérifier.
BlueRaja - Danny Pflughoeft

Réponses:

18

Comme d'autres l'ont dit, oui, les modèles ainsi que les animations sont codés en dur. Si vous souhaitez voir comment cela a été fait, rendez-vous sur le wiki Minecraft Coder Pack .

Le package a été créé pour aider les créateurs de mod à décompiler, modifier et recompiler les classes Minecraft. Les instructions sont incluses dans les fichiers Lisez-moi fournis avec le package. Le package contient des scripts pour décompiler, recompiler et ressusciter le jeu et le serveur.

Les classes que vous voudrez regarder sont: ModelBase, ModelBiped et ModelRenderer.

ModelBiped contient les fonctions suivantes qui font les animations humanoïdes:

public void render(Entity entity, float time, float f1, ...)
{
    setRotationAngles(time, f1, ...);
    ...
}

public void setRotationAngles(float time, float f1, ...)
{
    ...
    bipedRightArm.rotateAngleX = MathHelper.cos(time * 0.6662F + 3.141593F) * 2.0F * f1 * 0.5F;
    bipedLeftArm.rotateAngleX = MathHelper.cos(time * 0.6662F) * 2.0F * f1 * 0.5F;
    ...
}

Les oscillations des bras sont simplement des fonctions cosinus. Le bras droit est décalé par PI pour les faire osciller dans des directions opposées.

graphique des oscillations des bras

J'espère que cela répond à votre question =)


Si vous souhaitez plus d'informations sur la façon de modifier Minecraft, consultez cette question:

Comment ajouter un mob personnalisé à Minecraft?

zfedoran
la source
Sis! Rotation euclidienne :(.
Jonathan Dickinson
8

Les modèles dans Minecraft sont codés en dur. Il n'y a aucune notion de hiérarchie de blocs (seulement une liste de blocs). Cela signifie que les animations sont effectuées de manière procédurale (de manière très basique) ou codées en dur avec interpolation.

Il existe quelques éditeurs pour les modèles Minecraft comme Techne ou FMCModeler qui permettent d'importer / exporter du code de modèle Minecraft pour les mods, mais ils ne prennent pas en charge les animations car il est probablement géré différemment pour chaque modèle.

Voici un exemple rapide généré avec FMCModeler:

//variables init:
public ModelRenderer box;

//constructor:
box = new ModelRenderer(0, 0);
box.addBox(0F, 0F, 0F, 16, 16, 16);

//render:
box.render(f5);

Une meilleure façon de le faire serait de construire un modeleur complet basé sur des blocs avec quelques notions de hiérarchie de blocs afin que vous puissiez animer les modèles avec des images clés et une interpolation.

Je suis en train de créer un outil de création de jeu multijoueur qui fait exactement cela (entre autres, http://craftstud.io/ ). Il permet déjà de créer des modèles texturés statiques complexes et d'autres sont en cours.

Voici un modèle complexe construit avec CraftStudio Comme vous pouvez le voir, les blocs sont disposés dans un arbre à droite: http://i.stack.imgur.com/FRQeV.png

Chaque bloc est sérialisé sur disque / sur le réseau avec les données suivantes:

  • Identifiant unique
  • ID du nœud parent
  • Position (affecte les descendants)
  • Échelle (affecte les descendants)
  • Angle (affecte les descendants)
  • Décalage par rapport au point de pivot
  • Taille de bloc
  • Décalage de texture de bloc (décalage des coordonnées UV pour la texturation)

Je prévois d'ajouter un support d'animation en stockant une carte avec des noms d'animation comme clé et une liste d'images clés comme valeur. Chaque image clé sera associée à un bloc et à une valeur à animer. Entre les images clés, les valeurs doivent être interpolées (soit linéairement pour la position, soit sphériquement pour les angles, recherchez lerp et slerp).

Elisée
la source
0

Les modèles de blocs Minecraft ne sont en fait pas codés en dur dans le jeu à partir de la version 1.8 et peuvent être modifiés à l'aide de packs de ressources. Le système de modélisation JSON est assez facile à comprendre et des modèles existent dans / models / block. Vous pouvez ensuite consulter le code pour voir comment il interprète les modèles JSON.

Tubulaire
la source