Четверг, 26 Декабря 2024, 18:42

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Зациклилась анимация GMS2
AntonioRSДата: Суббота, 02 Апреля 2022, 20:20 | Сообщение # 1
был не раз
Сейчас нет на сайте
У меня есть три спрайта:
0) Стоять
1) Ходить
2) Бить

По моей задумке, игрок должен нажимать на кнопку E и будет анимация удара. По истечении анимации удара, будет снова анимация "стоямбы"

Код

if mayMove == true {
    if keyboard_check(ord("W")) and place_empty(x,y-1,obj_collision) { y -= spd; isMove = 1;}
    if keyboard_check(ord("S")) and place_empty(x,y+1,obj_collision) { y += spd; isMove = 1}
    if keyboard_check(ord("A")) and place_empty(x-1,y,obj_collision) { x -= spd; isMove = 1; image_xscale = 1;}
    if keyboard_check(ord("D")) and place_empty(x+1,y,obj_collision) { x += spd; isMove = 1; image_xscale = -1;}
    if keyboard_check(vk_nokey) {isMove = 0;}
}

switch isMove{
    case 0: {sprite_index = img_PlayerStop;} break;
    case 1: {sprite_index = img_PlayerMovement;} break;
    case 2: {sprite_index = img_PlayerAttack;} break;
}

//////////////////////////////////////////////

if keyboard_check(ord("E")) and mayMove == true{
    mayMove = false;
    isMove = 2;
    if (image_index = image_number - 1) {
  isMove = 0;
  mayMove = true;
    }
}


Но по непонятной для меня причине, анимация удара просто зацикливается и всё(


Состоим в Диванных войсках
TLTДата: Суббота, 02 Апреля 2022, 22:41 | Сообщение # 2
Сейчас нет на сайте
Можно добавить проверку на "отжатие кнопки", чтобы управление срабатывало один раз. Думаю, что так проще. Но можно в конце цикла анимации добавить переменную и окаймить скрипт проверкой этой переменной. Посмотри документацию - есть ли в GML проверка отжатия кнопки. Для скриптовых ЯП это обычно продумывается.

Дао, выраженное словами, не есть истинное Дао.
AntonioRSДата: Воскресенье, 03 Апреля 2022, 00:57 | Сообщение # 3
был не раз
Сейчас нет на сайте
Код
if mayMove == true {
    if keyboard_check(ord("W")) and place_empty(x,y-1,obj_collision) { y -= spd; isMove = 1;}
    if keyboard_check(ord("S")) and place_empty(x,y+1,obj_collision) { y += spd; isMove = 1}
    if keyboard_check(ord("A")) and place_empty(x-1,y,obj_collision) { x -= spd; isMove = 1; image_xscale = 1;}
    if keyboard_check(ord("D")) and place_empty(x+1,y,obj_collision) { x += spd; isMove = 1; image_xscale = -1;}
    if keyboard_check(vk_nokey) {isMove = 0;}
}

switch isMove{
    case 0: {sprite_index = img_PlayerStop;} break;
    case 1: {sprite_index = img_PlayerMovement;} break;
    case 2: {sprite_index = img_PlayerAttack;} break;
}

//////////////////////////////////////////////
if keyboard_check(ord("E")) {
    attack = true;
    mayMove = false;
}

if (attack == true) {
    isMove = 2;
    
    if (image_index = 19) {
  
  attack = false;
  mayMove = true;
  isMove = 1;
  //exit;
    }
}
Я попытался проверить переменную, но анимация снова зацикливается... Мне нужно чтобы когда я нажимал на E (нажал и отпустил), то проигрывалась один раз анимация, а потом снова состояние покоя

Добавлено (03 Апреля 2022, 01:12)
---------------------------------------------
Я решил проблему. Ошибка оказалась в первых строчках обозначающих движение персонажа. А метод с переменными очень помог (код стало понятнее читать) *спасибо*

Код
if keyboard_check(ord("E")) {
    attack = true;
}

if (attack = true){
    isMove = 2;
    if (image_index > 18) {
  isMove = 0;
  attack = false;
    }
}


Состоим в Диванных войсках
SpringДата: Воскресенье, 03 Апреля 2022, 01:25 | Сообщение # 4
частый гость
Сейчас нет на сайте
Я плохо разбираюсь в Game Maker'е, но попробуй сделать так:
Код
if keyboard_check(ord("E")) and attack != true
{...}

Долго же я думал)*


Сообщение отредактировал Spring - Воскресенье, 03 Апреля 2022, 01:26
  • Страница 1 из 1
  • 1
Поиск:

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