| Не работает анимация ближнего боя, конфликт с событием 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 |  |  |  |  |