Пятница, 29 Марта 2024, 13:16

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Не работает анимация ближнего боя, конфликт с событием alarm (И так же есть проблема с движением врагов в разные стороны)
Не работает анимация ближнего боя, конфликт с событием 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
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Не работает анимация ближнего боя, конфликт с событием alarm (И так же есть проблема с движением врагов в разные стороны)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг