Game Maker - создание игр | HellRoom Games
Март 24, 2025, 02:17:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Об использовании Iv Animation  (Прочитано 26876 раз)
0 Пользователей и 1 Гость смотрят эту тему.
life Jumb
GM Pro user
*

Репутация: 251
Offline Offline

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« : Ноябрь 03, 2014, 04:44:45 »

Iv Animation - программа для создании 2d кодовой скелетной анимации для gm и gms.
Эта статья является туториалом к Iv Animation.
Для начала я помогу вам понять: нужна ли вам эта программа? И тем самым сэкономить ваше время на прочтение этой статьи.
Итак, если:

1. Вы хотите сделать сложную скелетную анимацию игровых персонажей. (Делаете паркур, файтинг, множество кат-сцен и т.д.)
2. Планируете реализовать просто много анимаций в вашей игре.
3. Одной из фишек вашего проекта будет слоумо (замедление времени). (Кодовая анимация будет проигрываться гладко на любой скорости)
4. Планируете кастюмизацию героя, надеваемый армор и тд. (Каждому элементу скелета, может соответствовать свой спрайт)
5. Если вы новичок и не можете сделать анимацию героев самостоятельно.

...тогда советую уделить время этой статье.

Для начала объясню базовый принцип работы Iv Animation:
В окне программы вы создаете скелет и неограниченный набор анимаций к нему. Затем экспортируете\сохраняете его в .ivs (собственный формат Iv Animation) файл. Затем экспортируете в свой проект скрипты. И далее просто одной строчкой кода в draw рисуете анимацию на своих спрайтах.

При старте программы вы увидите ее окно:


На шкале времени показываются ключи текущего слоя. Перемещаться по шкале можно: вращая колесо мыши, зажав колесо и двигая мышью по оси x, или стрелочками (движение стрелочками происходит с текущем play speed, что можно иногда использовать вместо стандартного pause\play).Зажав Ctrl и вращая колесо можно менять масштаб шкалы времени. Space - play\pause.

Для начала работы нужно создать скелет. Скелет состоит из элементов, чтобы создать первый элемент, нажмите ПКМ по центру анимации.

Iv Animation предложит ввести длину элемента в пикселях, затем базовое направление элемента, оно установится во всех ключах.

Это можно снова проделать создав ветвь в конце элемента.

Вот мой скелет для примера. Зажав ПКМ, можно менять положение центра скелета.

Следующим шагом станет его анимирование. Анимация состоит из ключей расположенных на шкале времени, в каждом ключе хранится состояние каждого элемента.
Создать ключ можно кнопкой add key или клавишей "Insert". Ключ создаться в вашем текущем положении на шкале и автоматически выделится.

Вы должны четко понимать какой ключ на данный момент выделен. Изменяя состояние скелета, вы изменяете его только для выделенного ключа.
Как только 1 из ключей выделен, можно начать манипулирования со скелетом. Для этого нужно нажать ЛКМ по суставу скелета, и удерживая ЛКМ менять его направление. Если зажать Shift, направление будет меняться и для всех дочерних элементов.
Создав второй ключ, следует проделать тоже-самое. Затем запустить play и посмотреть что получилось.

Таким методом происходит создание анимации в Iv Animation.
Ctrl+C копирует выделенный ключ, Ctrl+V вставляет в текущее положение ползунка.
Созданные ключи можно перемещать по шкале мышью.

Еще 1 момент связанный с ключами, это power/степень ключа

От нее зависит: как будет меняться состояние скелета на отрезке между двумя ключами. По умолчанию степень первая, тип взаимодействия: линейный. На словах сложнее, чем на самом деле. Степень ключа управляет отрезком, находящимся, между текущим и следующим ключом.

Слои\Layers предназначены для создания нескольких анимаций, для одного скелета. Скорее всего, ваш персонаж будет проигрывать больше одной анимации, для этого вам следует использовать слои.

Здесь видно, что текущий слой: первый. Всего слоя 2, ведь их нумерация начинается с нулевого. С помощью Page up\Page down можно быстро между ними переключатся.

С помощью небольшой кнопки в верхнем углу, можно открыть меню элементов и групп.

Наведя мышь на элемент в этом меню, Iv Animation подсветит его на скелете. Вы можете делить элементы на группы. Например: вы могли бы захотеть проигрывать анимации раздельно для торса и ног персонажа.
Для этого следует создать 2 группы, затем, нажав на элемент, перетащить его на нужную группу, не отпуская мышь.
Отдельное слово о группе 'All', в ней находятся все элементы. Пока выбрана эта группа, вы можете перемещать элементы внутри нее, формируя определенную последовательность.
Дело в том что эта последовательность влияет на отрисовку. Элементы в начале списка будут отрисованы раньше, и следовательно находится на заднем плане. В противоположность элементам в конце списка.


Когда все подобные нюансы будут учтены и анимация настроена. Следует сохранить проект нажав на кнопку "save".
Тут главное не промахнутся и не нажать случайно на "new".

Теперь о скриптах. Скрипты лежат в архиве с прогой. Они все должны быть импортированы в ваш проект. Далее я буду их называть функциями.

iv_ini()
Самая первая функция, должна быть вызвана однажды, перед использованием всех остальных.

iv_ani_load(fname)
Загружает анимацию в игру, аргумент "fname" - имя файла .ivs, функция возвращает real идентификатор анимации. Который должен будет использоваться в последующих функциях.

iv_ani_destroy(ani)
Удаляет анимацию из игры, высвобождая занятую ей память, аргумент "ani" - идентификатор анимации, коротая должна быть удалена.

Далее есть 2 простые функции для отрисовки анимации.

iv_draw_ani(ani,x,y,ms,layer,sprlist)
Эта функция должна быть использована в draw. Аргумент "ani" - идентификатор анимации, которая должна быть отрисована. Аргументы "x" и "y" - позиция, в которой будет нарисована анимация, она соответствует центру анимации.
Аргумент "ms" - время в миллисекундах, кадр анимации который должен быть отрисован, разумеется, можно указывать дробные значения, что позволяет проигрывать анимацию плавно на любой скорости.
Аргумент "layer" - слой анимации, нумерация слоев начинается с нулевого. И наконец аргумент "sprlist" - строка со спрайтами..
Аргумент "sprlist" должен быть строкой, пример строки выглядит так: "1\-1\2\3\2\3\4\5\4\5\0". string(идентификатор спрайта) разделенный символом "\". Очередность спрайта должна соответствовать номеру элемента. Визуально это можно посмотреть в меню элементов в Iv Animation. Вместо идентификатора спрайта можно указать "-1", тогда для соответствующего элемента не будет нарисован никакой спрайт.
Например, составлена строка может быть так:
Код:
sprlist=string(sprite2)+'\'+string(-1)+'\'+string(sprite3)+'\'+string(sprite4)+'\'+string(sprite3)+'\'+string(sprite4)
Или так:
Код:
sprlist=string(sprite2) //ele1
sprlist+='\'+string(-1) //ele2
sprlist+='\'+string(sprite3) //ele3
sprlist+='\'+string(sprite4) //ele4
sprlist+='\'+string(sprite3) //ele5
sprlist+='\'+string(sprite4) //ele6

iv_draw_ani_ext(ani,x,y,ms,layer,sprlist,rot,scx,scy)
Аргумент "rot" - вращение анимации относительно центра. Аргументы "scx" и "scy" - масштабирование анимации, по умолчанию: "scx" и "scy" =1  (в v0.9 пока нельзя указывать не одинаковые "scx" и "scy", будет доработано)

Это были простые функции для работы с анимациями, для продвинутого использования анимаций, используется другой алгоритм.
Начинается он с функции:

iv_set_mask(ani,x,y,ms,layer,rot,scx,scy,sprlist,group,mix,layer2,ms2,e)
14 аргументов. Первые девять описаны ранее, остальные распишу чуть позже.
Эта функция не рисует анимацию, она формирует маску скелета и устанавливает массив рисования. Массив: global.ivdr[x,y]
Его графическое представление:

По первому индексу (x), ячеек массива всегда 10. По второму (y): зависит от количеств элементов в скелете.
Функция:
iv_draw_mask()
Отрисовывает массив, как продемонстрировано на рисунке. То-есть:
Код:
iv_draw_ani(ani,x,y,ms,layer,sprlist)
Тоже самое что:
Код:
iv_set_mask(ani,x,y,ms,layer,rot,scx,scy,sprlist,group,mix,layer2,ms2,e)
iv_draw_mask()

Вы можете работать с этим массивом, возвращая или меняя значения находящиеся в нем.
Код:
iv_set_mask(ani,x,y,ms,layer,rot,scx,scy,sprlist,group,mix,layer2,ms2,e)
global.ivdr[2,3]=2
global.ivdr[5,2]=90
global.ivdr[5,10]=point_direction(global.ivdr[3,10],global.ivdr[4,10],mouse_x,mouse_y)+90
.
.
.
.
iv_draw_mask()

Теперь об остальных аргументах iv_set_mask.
Аргумент "group" - номер группы элементов, для которых будет проиграна анимация. 0 - для всех элементов. Важно понимать: что если элемента нет в группе, то для него не будет изменена информация в отрисовочном массиве. Например:
Код:
iv_set_mask(ani,x,y,ms,layer,rot,scx,scy,sprlist,0,mix,layer2,ms2,e)
iv_set_mask(ani,x,y,ms,layer,rot,scx,scy,sprlist,1,mix,layer2,ms2,e)
iv_draw_mask()
Этот код проиграет одну анимацию для всех элементов, и другую для группы 1.

Аргументы "mix", "layer2" и "ms2". В качестве "ms2" и "layer2", стоит указать другую другую анимацию (или хотя-бы другой кадр), с которой вы хотите смешать первую. То-есть: смешать "layer" "ms" и "layer2" "ms2".
Аргумент "mix" - коэффициент смешивания, варьируется от 0 до 1. 0 - "layer" "ms", 1 - "layer2" "ms2" Используйте во всех трех аргументах 0 если не нужно.

Аргумент "e" - принцип его работы схож с группами. Это номер элемента, от которого он, и все его дочерние элементы будут собраны в группу. И только для них информация запишется в отрисовочный массив.
Скорее всего вам это не пригодится, используйте 0.

iv_get_layer_start(ani,layer)
Возвращает начало слоя "layer" в ms, анимации "ani".

iv_get_layer_end(ani,layer)
Возвращает конец слоя "layer" в ms, анимации "ani".

PS: Алгоритм работы скриптов поначалу может показаться сложным, поэтому: если сразу все не понятно, используйте более простой iv_draw_ani. И задавайте вопросы здесь.


Текущая версия V0.9
Тема с прогой
« Последнее редактирование: Ноябрь 12, 2014, 20:24:04 от life Jumb » Записан

 
Skyblade
(Artalasky)
GM Pro user
*

Репутация: 344
Offline Offline

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]2 место в конкурсе: Адекватные игры #2 [Стимпанк]
API: Unity 3D
Деятельность: 2D|3D|YouTube
Сообщений: 1105



WWW
« Ответ #1 : Ноябрь 03, 2014, 15:24:30 »

Почти как Spine, только для gm, жду 
Записан

truezipp
Участник
****

Репутация: 79
Offline Offline

Пол: Мужской
Награды:
За постоянность!3 место в конкурсе
API: GameMaker Studio Pro
Деятельность: кодер, художник, музыкант, геймдизайнер
Сообщений: 204



WWW
« Ответ #2 : Ноябрь 03, 2014, 19:06:42 »

Почти как Spine, только для gm, жду 
Мне даже больше чем Spine понравилось! Интерфейс очень интуитивен - сел и в 3 клика разобрался.
Записан

exotic fishing (android / win) | greedy bot (android / win)
life Jumb
GM Pro user
*

Репутация: 251
Offline Offline

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« Ответ #3 : Ноябрь 08, 2014, 07:11:01 »

Обновил статью по скриптам, к обнове v0.9
Записан

 
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 1.262 секунд. Запросов: 28.