if alarm[0] <= 0{ state = choose(state_enemy_wander, state_enemy_idle); alarm[0] = room_speed*irandom_range(1, 2); targetx = irandom(room_width); targety = irandom(room_height); }
и scr_check_player
Код
if (instance_exists(o_hero)) { var dis; dis = point_distance(x, y, o_hero.x, o_hero.y); if (dis < sight ) { state = state_enemy_chasing; targetx = o_hero.x; targety = o_hero.y;
} else { state_enemy_choose_next(); }
} else { state_enemy_choose_next(); }
и событие collision для врага и ГГ
Код
if (state != state_enemy_stall){ var dir; dir = point_direction(other.x,other.y, x, y); var xdir; xdir = lengthdir_x(1, dir); var ydir; ydir = lengthdir_y(1, dir); var damage; damage = instance_create(other.x+xdir, other.y+ydir, o_enemy_damage); damage.creator = id; state = state_enemy_stall; alarm[1] = room_speed; }
И все было бы здорово, если бы не следующие ситуации:
ситуация 1: иногда противник может атаковать с явно преувеличенной дистанции. при этом ударить нас он не может, а мы его вполне себе можем бить
ситуация 2: - самая главная проблема Заскринить не могу, но могу описать суть - персонаж противника после атаки внезапно начинает оббегать ГГ либо убегать непонятно куда, атакуя через секунду забежав к персонажу с рандомной стороны. как бы можно сказать что это фича, но это жутко раздражает, если честно
Опять же, необходимый код для других событий/объектов/скрипты могу предоставить
Уверен что проблема дурацкая и легко решаемая, но я уже не знаю как. Пробовал вместо mp_potential_step(o_hero.x, o_hero.y, sp, false); следующие варианты: move_towards_point(targetx, targety,sp); // просто после атаки пробегает сквозь персонажа, разворачивается и бежит сквозь персонажа в обратном направлении mp_potential_step_object(targetx, targety, sp, 0); //не заметил разницы с mp_potential_step и x += sign(targetx - x); //ужасно дрыгаясь прибегает к персонажу, атакует и так же ужасно дрыгаясь начинает оббегать y += sign(targety - y);
Лучше не стало. Увы. Надеюсь на вашу помощь
Сообщение отредактировал Daedros - Пятница, 29 Июля 2016, 00:36
Я так понимаю, нет состояния атаки. Значит нужно сделать, чтобы во время атаки при соблюдении необходимых условий происходила атака, а не движение Также глюки может вызывать сочетание этих строк
Код
if distance_to_object(o_hero) > 1 { sp = 2;
т.к. после последнего шага, расстояние как правило будет <1 Помогу с текстом, сюжетом, сценарием игры
Сообщение отредактировал Huricane - Воскресенье, 31 Июля 2016, 01:27
Huricane, Спасибо, да, там явно косячное место было, я в разных примерах смотрел реализацию и что-то слепить пытался. Разобрался, сделал по-другому, без доп. состояния атаки.