Блог ☯

суббота, 3 декабря 2016 г.

Как сделать анимацию в игре?

Замутил небольшой видео урок о том как сделать анимацию в игре:



Игры я делаю в game maker studio, с графикой мне помогает мой товарищ. 

Далее, как и обещал в видео: код и некоторые другие детали.

По сути дела всё очень просто в плане кода

Как сделать анимацию в игре?

Пишем в step у объекта, для которого мы делаем анимацию. 

Далее код, который я показывал в видео:

if keyboard_check(ord('S'))
{
    sprite_index=s_hero_move
}
else if keyboard_check(ord('A'))
{
    sprite_index=s_hero_move
}
else if keyboard_check(ord('D'))
{
    sprite_index=s_hero_move
}
else if keyboard_check(ord('W'))
{
    sprite_index=s_hero_move
}
else if mouse_check_button(mb_left)
{
    sprite_index=s_hero_rage // Ярость. У меня, в случае выстрела
}
else if keyboard_check(vk_shift)
{
    sprite_index=s_hero_duck // Приседание
}
else
{
    if global.hp=4 then sprite_index=s_hero_100
    if global.hp=3 then sprite_index=s_hero_75
    if global.hp=2 then sprite_index=s_hero_50
    if global.hp=1 then sprite_index=s_hero_25
}

Понятно что просто скопировать может быть недостаточно. Может быть, у вас другие кнопки движения или-же вы не делайте разные спрайты для повреждённого персонажа. Если так (что во много раз проще), тогда последнюю часть просто пишите:

else
{
 sprite_index=s_hero
}

"s_hero" - это у вас будет обычный спрайт персонажа который не двигается.

Как рисовать спрайты и анимацию это тема отдельная, единственное что могу - это посоветовать очень базовый гайд по пиксельарту, который я делал. 
И ждите поста Артёма в этом блоге, уже конкретно про анимацию. 

Можно делать и немного по другому. Вы можете написать sprite_index=s_hero_move при нажатии на кнопки движения. Это более простой вариант. Однако, потом вы поймёте что даже когда вы остановились, анимация продолжается. 

Тогда вам можно прописать sprite_index=s_hero (когда герой не двигается) в такой специальной штуке как no key


Как сделать анимацию в игре?


И вроде как, всё будет ок. Однако, в некоторых случаях такой простой способ может не сработать. У вас могут конфликтовать разные действия. 

Прописывать анимацию у врагов можно в зависимости от вашей механики, но понятно что кнопок враги не жмут и тут нужно действовать по другому. Как сделаю я?

Можно попробовать (да и для героя) сделать это просто через speed

speed - встроенная штука для всех объектов и она показывает скорость. Если 0, то объект не двигается. Следовательно, можно делать тупо:

if speed=0 then  sprite_index=s_monster_stays // спрайт где враг стоит
if speed<>0 then  sprite_index=s_monster_moves // спрайт где враг идёт

<> означает - не равно. То есть, отлично от. В данном случае - отлично от нуля. Не ноль. 

Если еще какие-то вопросы, заходите в мой паблик.

Я там создал специальное обсуждение - вопросы про GameMaker