Добавление простой анимации моба ч.2
- ozick
- 14 янв. 2016 г.
- 3 мин. чтения
В этой части будет идтись о добавлении простой анимации ходьбы нашему мобу. В первой части мы подготовили модель моба к корректной анимации. Если вы этого не сделали - сделайте. Я буду работать все с той же моделью Санты. Скажу сразу, его конечности (и голова) состоят из нескольких шейпов. Например, шейпы правной руки (right arm):
ra1
ra2
ra3
ra4
Головы (head):
h1
h2
h3
h4
h5
И так далее. Такое название шейпов поможет вам, если у вашего моба также по несколько шейпов на конечность. После того, как вы исправили модель моба, заново экспортируйте ее в .java
В MCreator`e выделите мод моба, и нажмите на кнопку его редактирования. Заново загрузите модель моба, и остановитесь на окне анимации:

Теперь задайте на каждом пункте нужный шейп:
Head animation part - шейп головы
Right leg animation part - шейп правой ноги
Left leg animation part - шейп левой ноги
Right arm animation part - шейп правой руки
Left arm animation part - шейп левой руки
Если же у вас какая-то часть состоит из нескольких шейпов - указывайте один из них (любой, но удобно - первый)
У меня это выглядит так:

Теперь проходим все остальные этапы настройки мода. Если у вашего моба конечности состоят из одного шейпа - анимация готова. Можете заходить в игру, и наслождаться его походкой.
Для тех, у кого конечности моба состоят из более чем одного шейпа, прошу проследовать за мной.
Нужно вручную дописать анимацию всем остальным шейпам.
В главном меню программы, где кнопки Create new element, Edit element есть кнопка View source (просмотреть код). Выбераем мод с нашим мобом, и нажимаем на эту кнопку
Открывается окно с кодом мода с мобом. Не пугаясь, листайте в самый низ (чаще, ползунок сразу внизу)
Если вы добавляли анимацию, то вы увидите такие стройки:
this.что-то.rotateAngleY = f3 / (180F / (float)Math.PI); this.что-то.rotateAngleX = f4 / (180F / (float)Math.PI); this.что-то.rotateAngleX = MathHelper.cos(f * 1.0F) * -1.0F * f1; this.что-то.rotateAngleX = MathHelper.cos(f * 1.0F) * 1.0F * f1; this.что-то.rotateAngleX = MathHelper.cos(f * 0.6662F + (float)Math.PI) * 2.0F * f1 * 0.5F; this.что-то.rotateAngleX = MathHelper.cos(f * 0.6662F) * 2.0F * f1 * 0.5F;
Вместо "что-то" у вас должно стоять название шейпа.
Первые две строки отвечаютза анимацию головы
Потом идут:
Левая нога
Правая нога
Левая рука
Правая рука
(в такой последовательности)
Например, при назначении анимации головы, и выбрал шейп h1
Тогда у меня первые 2 строки будут выглядеть так:
this.h1.rotateAngleY = f3 / (180F / (float)Math.PI); this.h1.rotateAngleX = f4 / (180F / (float)Math.PI);
Или другой пример. При назначении анимации правой руки, я выбрал шейп ra1
Тогда, строка анимации правой руки у меня должна выглядеть так:
this.ra1.rotateAngleX = MathHelper.cos(f * 0.6662F + (float)Math.PI) * 2.0F * f1 * 0.5F;
А левой (la1):
this.la1.rotateAngleX = MathHelper.cos(f * 0.6662F) * 2.0F * f1 * 0.5F;
Вы должны понять как работает эта часть кода.
После этого приступим к дописанию анимации.
Нужно на подобии первых шейпов анимировать остальные шейпы.
Например. У меня правая нога состоит из 4-ч шейпов:
rl1
rl2
r3
rl4
А строка анимации первого шейпа выглядит так:
this.rl1.rotateAngleX = MathHelper.cos(f * 1.0F) * 1.0F * f1;
С такой строкой анимирован только первый шейп правой ноги. После этой строки добавим n-ое кол-во таких же строк (копируем и вставляем), где n - кол-во шейпов конечности. В моем случае - 4.
Но в каждой строке нужно заминить название первого шейпа на остальные шейпы. У меня это:
this.rl1.rotateAngleX = MathHelper.cos(f * 1.0F) * 1.0F * f1;
this.rl2.rotateAngleX = MathHelper.cos(f * 1.0F) * 1.0F * f1;
this.rl3.rotateAngleX = MathHelper.cos(f * 1.0F) * 1.0F * f1;
this.rl4.rotateAngleX = MathHelper.cos(f * 1.0F) * 1.0F * f1;
Как видите, в каждой строке анимируется часть конечности (правой ноги)
В первой строке анимируется шейп rl1, во второй - rl2, в третьей - rl3, ну и в четвертой - rl4.
(и все эти шейпы образуют одну часть, в моем случае - правой ноги)
У вас же может быть другое кол-во строк (зависит от кол-ва шейпов в одной конечности).
С головой также, но по два шейпа.
Допустим, голова моего моба состоит из 3-х шейпов.
Анимация одного шейпа головы выглядит так:
this.h1.rotateAngleY = f3 / (180F / (float)Math.PI); this.h1.rotateAngleX = f4 / (180F / (float)Math.PI);
Тогда полная анимация головы будет выглядеть так:
this.h1.rotateAngleY = f3 / (180F / (float)Math.PI); this.h1.rotateAngleX = f4 / (180F / (float)Math.PI);
this.h2.rotateAngleY = f3 / (180F / (float)Math.PI); this.h2.rotateAngleX = f4 / (180F / (float)Math.PI);
this.h3.rotateAngleY = f3 / (180F / (float)Math.PI); this.h3.rotateAngleX = f4 / (180F / (float)Math.PI);
this.h4.rotateAngleY = f3 / (180F / (float)Math.PI); this.h4.rotateAngleX = f4 / (180F / (float)Math.PI);
В голове, на каждый шейп по две строки. Таким образом делаем анимацию каждому оставшемуся шейпу.
После того, как закончите, нажимайте кнопку сверху Save, и закрываем редактор. Теперь можно запускать игру, и наблюдать за походкой моба.
ВНИМАНИЕ! После каждой рекомпиляции мода (редактировании), дописаная анимация шейпов будет "слетать". По этому после первого раза желательно скопировать код полной анимации, и сохранить его у себя где-то в файле.
Commenti