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