Анимации — различия между версиями

 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
<div class="mw-parser-output">
+
<div class="mw-parser-output"><div class="mw-parser-output">
InnerCore, в отличии от его предшественника CoreEngine, имеет встроенную поддержку анимаций. Это значит, что для того, чтобы в мире появилась какая-то моделька, не нужно создавать моба. Достаточно создать лишь простейшую анимацию. Всего существует три вида анимаций - базовые анимации, анимации предметов и анимации текста. Давайте рассмотрим их возможности подробнее:
+
InnerCore, в отличии от его предшественника CoreEngine, имеет встроенную поддержку анимаций. Это значит, что для того, чтобы в мире появилась какая-то моделька, не нужно создавать моба. Достаточно создать лишь простейшую анимацию. Всего существует два вида анимаций - базовые анимации и&nbsp;анимации предметов. Давайте рассмотрим их возможности подробнее:
  
 
= Базовые анимации =
 
= Базовые анимации =
Строка 14: Строка 14:
  
 
Стоит отметить, что render может принимать любое значение нативного рендера, как кастомного (''render.getId()''), так и [[InnerCore/Список_ванильных_рендеров|ванильного]].
 
Стоит отметить, что render может принимать любое значение нативного рендера, как кастомного (''render.getId()''), так и [[InnerCore/Список_ванильных_рендеров|ванильного]].
 
+
<div class="mw-parser-output">
 
== Динамичные анимации ==
 
== Динамичные анимации ==
  
Строка 25: Строка 25:
 
});</syntaxhighlight>
 
});</syntaxhighlight>
  
Замечу, что '''''this'''''внутри функции обновления анимации будет указывать на саму анимацию, что и используется в этом примере.&nbsp;
+
Замечу, что '''''this&nbsp;'''''внутри функции обновления анимации будет указывать на саму анимацию, что и используется в этом примере.&nbsp;
 
+
</div>
 
== Прочие переменные и методы объекта Animation.Base ==
 
== Прочие переменные и методы объекта Animation.Base ==
  
Строка 37: Строка 37:
 
*''destroy()'' - уничтожает анимацию в мире.  
 
*''destroy()'' - уничтожает анимацию в мире.  
 
*''describe(description)'' - задает настройки для анимации в следующем формате:  
 
*''describe(description)'' - задает настройки для анимации в следующем формате:  
 +
 +
&nbsp;
 
<syntaxhighlight lang="Javascript">{
 
<syntaxhighlight lang="Javascript">{
 
     render: render,
 
     render: render,
Строка 44: Строка 46:
  
 
При этом параметры skin и scale считаются устаревшими, поскольку являются частью объекта рендера, а не самой анимации. Их использовать не следует.&nbsp;
 
При этом параметры skin и scale считаются устаревшими, поскольку являются частью объекта рендера, а не самой анимации. Их использовать не следует.&nbsp;
 
+
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">
 
= Анимации предметов =
 
= Анимации предметов =
  
Также можно создать изображение в мире предмета.
+
Анимации предметов работают так же, как и базовые, но вместо объекта рендера принимают описание предмета ([[InnerCore/Список_ванильных_рендеров|тип рендера]] ItemSprite, по-сути). Для создания используется следующий класс:
<pre>var ani_item = new Animation.Item(x, y, z);
+
<syntaxhighlight lang="Javascript"> var animation = new Animation.Item(x, y, z);</syntaxhighlight>
</pre>
 
 
 
В остальном эта анимация похожа на обычную, только настраивается она методом animation.describeItem
 
<pre>ani_item.describeItem({
 
 
 
    //Настраиваем характеристики отоюражаемого предмета
 
  
 +
Для того, чтобы анимация появилась в мире, опишем и загрузим её&nbsp;
 +
<pre>animation.describeItem({
 
     id: 280,
 
     id: 280,
 
 
     count: 1,
 
     count: 1,
 
 
     data: 0,
 
     data: 0,
 
    //Рендерим палку
 
 
    //Устанавливаем размер
 
 
 
     size: 1,
 
     size: 1,
 
+
     rotation: [Math.PI / 2, 0, 0],
    //Устанавливаем выравнивание по оси x/y/z
 
 
 
     rotation: "x\y\z",
 
 
 
    //Убираем неровности, если отрисовывается несколько анимаций
 
 
 
 
     notRandomize: true
 
     notRandomize: true
 +
});
 +
animation.load();
  
});
 
 
</pre>
 
</pre>
  
= Текстовые анимации =
+
Объясним подробнее предназначение каждого из параметров:
 
 
Также в мире можно отображать в мире текст:
 
<pre>var ani_txt = new Animation.Text(x, y, z);
 
 
 
//Настроим отображаемый текст
 
  
ani_txt.setText(text);</pre>
+
*id, count, data - стандартное описание предмета. Если count больше 1, будет отрисовано несколько предметов рядом, подобно дропу.&nbsp;
</div>
+
*size - размер предмета. По умолчанию 0.5.
 +
*rotation - позволяет изменить расположение предмета&nbsp;по трем осям. Задается в радианах. В примере Math.PI / 2 это 90°, поворачиваем анимацию вокруг оси x.&nbsp;  
 +
*notRandomize - не делать случайных отступов между предметами, если их больше 1. Если не задан или выставлен в false, расстояние между краями каждого отдельного предмета будет случайным.
 +
Данный тип анимации можно изменять динамически, так же, как и базовую.</div> </div> </div> </div> </div> </div>

Текущая версия на 19:40, 25 сентября 2018

InnerCore, в отличии от его предшественника CoreEngine, имеет встроенную поддержку анимаций. Это значит, что для того, чтобы в мире появилась какая-то моделька, не нужно создавать моба. Достаточно создать лишь простейшую анимацию. Всего существует два вида анимаций - базовые анимации и анимации предметов. Давайте рассмотрим их возможности подробнее:

Базовые анимации[править]

Статичные анимации[править]

Для создания базовой анимации используется класс Animation.Base, который создает новую анимацию на координатах x, y, z:

var animation = new Animation.Base(x, y, z);

Чтобы отобразить нашу модельку без анимации в мире, достаточно задать рендер анимации и загрузить её:

animation.describe({render: render.getId()});
animation.load();

Стоит отметить, что render может принимать любое значение нативного рендера, как кастомного (render.getId()), так и ванильного.

Динамичные анимации[править]

Для создания динамичных анимаций используется функция loadCustom(callable). В качестве параметра эта функция принимает лишь функцию, в которой мы и будем производить наши изменения в модели. Чтобы изменить рендер, достаточно лишь изменить его объект Render и вызвать метод refresh(). Для изменения расположения будем использовать функцию setPos(x, y, z), которая устанавливает новые координаты объекта в мире. Поскольку часто возникает необходимость изменить координаты относительно текущих, текущие будем получать из объекта coords. Внимание! Не изменяйте объект coords, это не изменит реальное расположение анимации в мире!

И, конечно же, пример:

animation.loadCustom(function(){ 
    this.setPos(this.coords.x + 0.5, this.coords.y, this.coords.z - 0.5); 
    this.refresh(); 
});

Замечу, что this внутри функции обновления анимации будет указывать на саму анимацию, что и используется в этом примере. 

Прочие переменные и методы объекта Animation.Base[править]

  • load() - создает анимацию в игре
  • loadCustom(callable) - создает динамичную анимацию в игре, используя функцию callable для изменения рендера и положения. 
  • setPos(x, y, z) - устанавливает положение анимации в мире.
  • coords - получает координаты анимации в мире.
  • getAge() - возвращает 0. Вдруг кому пригодится. 
  • refresh() - обновляет объект рендера анимации.
  • destroy() - уничтожает анимацию в мире.
  • describe(description) - задает настройки для анимации в следующем формате:

 

{
    render: render,
    skin: skin,
    scale: scale
}

При этом параметры skin и scale считаются устаревшими, поскольку являются частью объекта рендера, а не самой анимации. Их использовать не следует. 

Анимации предметов[править]

Анимации предметов работают так же, как и базовые, но вместо объекта рендера принимают описание предмета (тип рендера ItemSprite, по-сути). Для создания используется следующий класс:

 var animation = new Animation.Item(x, y, z);

Для того, чтобы анимация появилась в мире, опишем и загрузим её 

animation.describeItem({
     id: 280,
     count: 1,
     data: 0,
     size: 1,
     rotation: [Math.PI / 2, 0, 0],
     notRandomize: true
});
animation.load();

Объясним подробнее предназначение каждого из параметров:

  • id, count, data - стандартное описание предмета. Если count больше 1, будет отрисовано несколько предметов рядом, подобно дропу. 
  • size - размер предмета. По умолчанию 0.5.
  • rotation - позволяет изменить расположение предмета по трем осям. Задается в радианах. В примере Math.PI / 2 это 90°, поворачиваем анимацию вокруг оси x. 
  • notRandomize - не делать случайных отступов между предметами, если их больше 1. Если не задан или выставлен в false, расстояние между краями каждого отдельного предмета будет случайным.
Данный тип анимации можно изменять динамически, так же, как и базовую.