Skip to content

Comment animer une entité

Jibay Mcs edited this page Jun 3, 2017 · 7 revisions

Nous allons voir comment animer une entité avec les animations de CraftStudio


Pré-requis

Vous allez avoir simplement besoin de la classe d'une entité prête à être animée, vous trouverez un tutoriel simple pour créer une entité sur MinecraftForgeFrance car nous n'expliqueront pas la démarche complète ici.


La classe de l'Entité

public class EntityTest extends EntityAnimal implements IAnimated
{
    protected AnimationHandler animHandler = CraftStudioApi.getNewAnimationHandler(this);

    public EntityTest2(World par1World) {
        super(par1World);
        this.animHandler.addAnim(Mod_Test.MODID, "votre_animation", "votre_modele", false);
        this.setSize(1.0F, 1.5F);
    }

    @Override
    protected void applyEntityAttributes() {
        super.applyEntityAttributes();
        this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(4.0D);
    }

    @Override
    public AnimationHandler getAnimationHandler() {
        return this.animHandler;
    }

    @Override
    public EntityAgeable createChild(EntityAgeable ageable) {
        return null;
    }

    @Override
    public UUID getUUID() {
        return this.getPersistentID();
    }
}

Vous allez devoir implémenter la classe IAnimated à la classe de votre entité Et ainsi implémenter en même temps les fonctions getAnimationHandler() et getUUID()

Ensuite créez une variable du type AnimationHandler, appelez là animHandler par exemple pour pouvoir appeler, getNewAnimationHandler() de la classe CraftStudioAPI, pour ensuite définir la classe à animer en temps que paramètre this

Vous devriez avoir ceci:

protected AnimationHandler animHandler = CraftStudioApi.getNewAnimationHandler(this);

N'oubliez pas d'appeler la variable que nous avons créer précédemment dans la fonction getAnimationHandler()

    @Override
    public AnimationHandler getAnimationHandler() {
        return this.animHandler;
    }

Nous allons par la suite définir l'UUID de l'animation en récupérant celui de notre entité:

    @Override
    public UUID getUUID() {
        return this.getPersistentID();
    }

Nous avons maintenant créer ce qu'il nous fallait pour pouvoir correctement enregistrer et lancer les animations à notre entité


L'ajout des animations dans l'entité ce passe dans le constucteur de cette dernière:

Il vous suffira d'appeler l'AnimationHandler via son getter getAnimationHandler() pour utiliser la méthode addAnim Cette méthode est utilisable de différente manière, la JavDoc pourra vous aider !

Les méthodes addAnim() commencent toute par la déclaration de l'ID de votre mod (modid)

this.getAnimationHandler().addAnim(Mod_Test.MODID, "votre_animation", "le_modele_a_animer", false);

Vous l'aurez compris:

"votre_modid" correspond à l'ID de votre mod "votre_animation" correspond au nom de l'animation que vous voulez ajouter à l'entité "le_modele_a_animer" correspond au nom du modèle sur lequel vous avez exporté l'animation
false est le booléen pour savoir si votre animation ce joue en boucle ou non, ici elle ne se jouera pas en boucle (false)


Vous avez aussi la possibilité d'ajouter une animation inversé à votre entité

this.getAnimationHandler().addAnim(Mod_Test.MODID, "nouvelle_animation_inversée", "animation_qui_doit_etre_inversée");

Encore une fois un exemple parlant, le deuxième paramètre doit être le nom de la nouvelle animation, celle qui sera inversée

this.getAnimationHandler().addAnim(Mod_Test.MODID, "close_door", "open_door");

Pour cet exemple j'ai créé l'animation du nom de "close_door" qui est l'animation inversée de "open_door"


Vous avez aussi la possibilité d'ajouter une animation qui sera hard-codée c'est avec des lignes de code que vous créerez l'animation !

Par exemple si vous devez ajouter une animation où l'entité regarde autour d'elle.

Vous avez de la chance car cette animation custom est intégré à l'API !

this.animHandler.addAnim(Mod_Test.MODID, "lootAt", "le_modele_a_animer", new AnimationLootAt(this, "Head"));

Nous suivons la même démarche que la première fois, nous déclaront le modid puis le nom de l'animation ici lookAt on défini le modèle qui doit être animé (le_modele_a_animer), puis nous créons une nouvelle instance de notre animation codée à la main:
new AnimationLootAt(this, "Head")
this correspond à l'entité qui doit être animée
"Head" est la partie du modèle 3D qui sera animée, ici la tête donc

Nous avons maintenant vu les différentes façon d'ajouter une animation à notre entité, si cela ne vous parait pas trop clair, aidez-vous de la JavaDoc


Dernière partie de ce tutoriel, lancer l'animation sur notre entité !

Vous n'avez alors qu'a simplement appeler la fonction startAnimation() venant de l'AnimationHandler, petit exemple:

this.getAnimationHandler().startAnimation(Mod_Test.MODID, "mon_animation_enregistrée");

L'appel de cette méthode se fait dans n'importe quelle fonction que votre entité peut avoir:

Pourquoi pas dans la fonction onUpdate() si vous avez une animation qui doit ce jouer en boucle, ou bien dans processInteract(EntityPlayer player, EnumHand hand) lors de l'interraction avec votre entité ?
Libre à vous et votre imagination pour faire le reste !

Vous pourriez aussi avoir besoin de la méthode:

if(this.getAnimationHandler().isAnimationActive(Mod_Test.MODID, "mon_animation_enregistrée")) {}

Pour savoir si une animation est active ou non

Ou alors:

this.getAnimationHandler().stopAnimation(Mod_Test.MODID, "mon_animation_enregistrée");

Pour simplement stopper l'animation qui est lancée


Voilà qui conclu cette série de tutoriel pour savoir comment animer une entité ! Enjoy !

Clone this wiki locally