Среда, 27 Ноября 2024, 07:36

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
GMS 2 помогите прописать моба
HittagiДата: Пятница, 19 Февраля 2021, 19:34 | Сообщение # 1
был не раз
Сейчас нет на сайте
Анимация атаки обрывается на случайном кадре если меняется переменная state , в принципе понятно почему.Я подхожу , условие if ((state == states.attack)) выполняется,анимация начинается, я отхожу раньше чем закончилась анимация, переменная state меняется и анимация прерывается, помогите сделать так , чтобы анимация закончилась и только после этого менялся state.Код ниже
step event :
Код

if (state == states.idle && sprite_index != spr_skeleton_attack2)
{
counter += 1;
if (counter >= room_speed *3)
{
var change = choose(0,1);
switch(change)
{
case 0: state = states.wander;
case 1: counter = 0; break;
}
}
if (collision_circle(x,y,100,obj_character,false,false))
{
state = states.alert;
}
sprite_index = spr_skeleton_idle;
}
else
{
if (state == states.wander && sprite_index != spr_skeleton_attack2)
{
counter += 1;
x += moveX;
y += moveY;

if (counter >= room_speed *3)
{
var change = choose (0,1);
switch (change)
{
case 0: state = states.idle;
case 1:
my_dir = irandom_range(0,359);
moveX = lengthdir_x(spd, my_dir);
moveY = lengthdir_y(spd, my_dir);
counter = 0;

}
}
if (collision_circle(x,y,100,obj_character,false,false))
{
state = states.alert;
}
sprite_index = spr_skeleton_walk;
image_xscale = sign(moveX);
}
else
{
if (state == states.alert && sprite_index != spr_skeleton_attack2)
{
my_dir = point_direction(x,y,obj_character.x,obj_character.y);
moveX = lengthdir_x(spd, my_dir);
moveY = lengthdir_y(spd, my_dir);
x += moveX;
y += moveY;
if (!collision_circle(x,y,100,obj_character,false,false))
{
state = states.idle;
}
if (collision_circle(x,y,32,obj_character,false,false))
{
state = states.attack;
}
if (collision_circle(x,y,32,obj_wall,false,false))
{
moveX -= 1;
}
sprite_index = spr_skeleton_walk;
image_xscale = sign(moveX);
}
else
{
if ((state == states.attack))
{
if (firecd < 0)
{
sprite_index = spr_skeleton_attack2;
speed = 0;
instance_create_layer(x, y, "Instances",obj_hitbox_enemy);
global.timer1 = 4;
global.hit_true1 = true;
}
else
{
state = states.alert;
}
}
}
}
}
global.timer1 = global.timer1 -1;
if (global.timer1 <= 0 )
{
global.timer1 = 0;
}
firecd = firecd - 1;

create:
Код
enum states
{
idle,
wander,
alert,
attack
}
state = states.idle;
counter = 0;
spd = 0.9;
my_dir = irandom_range(0,359);
moveX = lengthdir_x(spd, my_dir);
moveY = lengthdir_y(spd, my_dir);
my_slash = noone;
firecd = 0;
global.hit_true1 = false;
global.timer1 = 0;
global.hit1 = 0;

animation end:
Код
if (sprite_index == spr_skeleton_attack2)
{
firecd = 300;
sprite_index = spr_skeleton_idle;
image_index = 0;
}
if (sprite_index == spr_skeleton_death)
{
image_index = 12;
}
if (sprite_index == spr_skeleton_walk)
{
image_index = 0;
}

if (sprite_index == spr_skeleton_idle)
{
image_index = 0;
}

другиe думаю не пригодятся


Сообщение отредактировал Hittagi - Пятница, 19 Февраля 2021, 19:37
MagicHeroДата: Суббота, 20 Февраля 2021, 11:17 | Сообщение # 2
участник
Сейчас нет на сайте
Сделай переменную блокиратор которая не позволяла бы менять значение state и через аларм с заданным временем в кадрах меняешь значение блокиратора чтобы была возможность менять state.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг