| 
				
				Не работает анимация ближнего боя, конфликт с событием alarm
				 | 
 | 
| Geth | Дата: Понедельник, 25 Января 2021, 22:58 | Сообщение # 1 |  
 
уже был 
Сейчас нет на сайте 
 
 | Хэлоу, помогите плез если можете, всю голову сломал уже. Итак, у меня есть объект игрока obj_player в котором я уже прописал передвижения и проигрывание анимации движения в 4 стороны, а так же прописал остановку анимации если игрок не нажимает клавиши. Далее. Создал объект obj_damage который создается по нажатию клавиши и прописал в событии create - alarm[0] = 1 ,а так же создал у объекта событие Alarm и прописал внутри instance_destroy(); - что бы объект obj_damage исчезал сразу после создания. И вот тут загвоздка как мне кажется, потому что я вроде бы понимаю , как прописать проигрывание анимации при ударе, по идее отличий от прописывания анимации движениям - нет, но видимо не до конца понимаю. Код события Steps объекта obj_player
 Код  ///Вызов родительского события event_inherited();
  ///Вызов скрипта с переменными управления player_move();
  ///Движение вправо if (right_move){     phy_position_x += player_speed;     sprite_index = player_sprite_right;     image_speed = 1; } ///Движение влево if (left_move){     phy_position_x -= player_speed;     sprite_index = player_sprite_left     image_speed = 1; } ///Движение вверх if (up_move){     phy_position_y -= player_speed;     sprite_index = player_sprite_up;     image_speed = 1; } ///Движение вниз if (down_move){     phy_position_y += player_speed;     sprite_index = player_sprite_down;     image_speed = 1; }
  ///Остановка движения если не нажаты клавиши if (!right_move and !left_move and !up_move and !down_move){     image_speed = 0;     ///Если не нажаты клавиши, то анимация возвращается к     ///первому по счету кадру     image_index = 0; }
  ///Условие для атаки if (player_attack){         ///Создание локальной переменной dmg_obj     var dmg_obj = instance_create_depth(x, y + 10, 0, obj_damage);     ///Обращение к переменной creator и записывание в неё id игрока     dmg_obj.creator = id; }
  ///Анимация атаки вниз if(player_attack) and (sprite_index = player_sprite_down) { sprite_index = player_attack_down; image_speed = 1; }
 
  И вроде все сделал так же как и с анимацией передвижения: добавил спрайты, выставил такое же количество фреймов как и у движений , но анимации атаки нет, вот я и грешу на событие alarm Может анимацию ударов вообще надо не в Steps объекта игрока писать ,а нужно создать Steps у объекта с нанесением урона Причем если убрать из первой строчки and (sprite_index = player_sprite_down) (это я пытаюсь привязать конкретный спрайт к направлению куда в данный момент смотрит игок) и оставить только if(player_attack) , то персонаж действительно повернется вниз, но анимации все равно не будет.
  И второй вопрос про анимацию движения врагов в разные стороны. Есть у меня объект врага obj_enemy_skelet, у него есть 4 спрайта для движений в 4 разные стороны как и у игрока. Ему я прописал в Steps следующее:
 Код  ///Проверка на существование объекта - игрока if (instance_exists(obj_player)){ ///Преследование игрока скелетом по осям x и y     phy_position_x += sign (obj_player.x - x) * speed_enemy;     phy_position_y += sign (obj_player.y - y) * speed_enemy;     image_speed = 1; }
 
  И теперь никак не пойму , как мне обозначить направление в котором он повернулся преследуя игрока? Сейчас у него воспроизводится только один спрайт, тот который привязал к самому объекту скелета.
  Заранее спасибо за помощь.
 
 Сообщение отредактировал Geth - Понедельник, 25 Января 2021, 23:00  |  
| 
 | 
 |    | 
| MagicHero | Дата: Среда, 27 Января 2021, 12:09 | Сообщение # 2 |  
| 
 постоянный участник 
Сейчас нет на сайте 
 
 | По поводу анимаций движения для скелета то там все просто, используй direction для определения направления скелета и на основе выбирай один из четырех спрайтов движения.
 Код if direction < 45 && direction >= 315 { спрайт движения вправо } else { if direction < 135 && direction >= 45 { спрайт движения вверх} else { и так для остальных 2-х направлений  или можно по другому используя div
 Код image_dir=(direction+45) div 90;  и получаешь image_dir со значением направления 0 и 4 вправо, 1 вверх, 2 влево, 3 вниз
  Насчет анимации атаки то я так понял она создается в обьекте obj_damage который ты уничтожаешь через 1 тик т.е. при 60 фпс это будет 1/60 секунды и если ты не супермен то заметить этот кадр будет сложно, моргать точно в этот момент не стоит )))
 
 Сообщение отредактировал MagicHero - Среда, 27 Января 2021, 12:17  |  
| 
 | 
 |    | 
| Geth | Дата: Среда, 27 Января 2021, 20:29 | Сообщение # 3 |  
 
уже был 
Сейчас нет на сайте 
 
 | Спасибо за ответ, но не помогло Сейчас в Steps у скелета такая картина, но враги как ходили с одной анимацией так и продолжают ходить
 Код  ///Вызов родительского события event_inherited();
  ///Проверка на существование объекта - игрока if (instance_exists(obj_player)){ ///Преследование игрока скелетом по осям x и y     phy_position_x += sign (obj_player.x - x) * speed_enemy;     phy_position_y += sign (obj_player.y - y) * speed_enemy;     image_speed = 1;     ///Применение спрайтов при движении в разные стороны     if (direction < 45 and direction >= 315) { sprite_index = enemy_skelet_right }   else {    if (direction < 135 and direction >= 45) { sprite_index = enemy_skelet_up}     else {      if (direction > 135 and direction) <= 45 { sprite_index = enemy_skelet_down}       else {        if (direction > 45 and direction <= 315) { sprite_index = enemy_skelet_left}        }      }    } }
 
 
  А насчет анимации атаки, я пробовал разные значения подставлять в alarm[0] =1, например с таким значением alarm[0] =300 ничего не меняется все равно Может нужно писать код на анимацию в объект с уроном ,а не с игроком? Я конечно так пытался сделать, но всё тщетно.
 |  
| 
 | 
 |    | 
| faridunibodullo | Дата: Воскресенье, 07 Февраля 2021, 00:55 | Сообщение # 4 |  
 
частый гость 
Сейчас нет на сайте 
 
 | ///Движение вниз if (down_move){ phy_position_y += player_speed; sprite_index = player_sprite_down; image_speed = 1; } else if(player_attack && down_move) { sprite_index = player_attack_down; image_speed = 1; }
 
 Сообщение отредактировал faridunibodullo - Воскресенье, 07 Февраля 2021, 00:57  |  
| 
 | 
 |    |