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.
|
|
| |