ACS. Захватываем управление.

Предисловие

В этом уроке я разберу функцию GetPlayerInput в ACS, эта функция возвращает нажатую кнопку. Не описать словами, какие возможности позволяет добиться эта функция, вы буквально можете управлять чем угодно, используя GetPlayerInput.

Вот, для примера, музыкальная игра из моего вада (wad в разработке).

Теперь, перейдем к написанию кода.

Пишем код

Добавьте следующий код к себе в ACS:

script "CheckInput" (void)
{
  while(true){
    int buttons = GetPlayerInput(-1, INPUT_BUTTONS);
    if(buttons & BT_FORWARD)
    {
      print(s:"Forward");
    }
    else if (buttons & BT_BACK)
    {
      print(s:"Backward");
    }
    else if (buttons & (BT_LEFT|BT_MOVELEFT))
    {
      print(s:"Left");
    }
    else if (buttons & (BT_RIGHT|BT_MOVERIGHT))
    {
      print(s:"Right");
    }
    else
    {
      print(s:"Nothing");
    }
    Delay(1);
  }
}

Разберем этот код подробно.

script "CheckInput" (void)

Здесь я вместо цифры (1), использовал строку («CheckInput«), сделал я это для удобства. Такие скрипты я буду называть именованными, кстати, работают они только в UDMF формате.

while(true){

Дальше идет бесконечный цикл, он подробно разбирался в уроке ACS. Циклы.

int buttons = GetPlayerInput(-1, INPUT_BUTTONS);

Функция GetPlayerInput возвращает код нажатой клавиши (цифру, представляющую данную клавишу). Синтаксис у неё следующий:

GetPlayerInput(номер_игрока, что_считывать)
  • номер_игрока — это номер данный игроку, в одиночной игре он равен «-1«.
  • что_считывать — указывает режим считывания, подробнее на вики.

В нашем случае:

  • номер_игрока — «-1«, потому-что одиночная игра.
  • что_считывать INPUT_BUTTONS, то-есть мы получаем код нажатой клавиши.

Сейчас, мы получили код нажатой клавиши, и запихнули его в переменную buttons. Далее, я поставил условие в котором, при нажатии клавиши «вперед«, появляется сообщение «Forward«.

if(buttons & BT_FORWARD)
{
  print(s:"Forward");
}

if/else, я разбирал в уроке ACS. Операторы ветвления if/else.

BT_FORWARD — это константа (неизменяемое значение), как правило, константы пишутся капсом. Внутри неё записан код клавиши «вперед» (клавиша «вперед», задается в настройках игры). Полный список, констант доступен на вики.

Также, поговорим о символе «&«. Называется он «Амперсанд«, и обозначает логическое «И«, я буду его называть AND, для простоты.

AND возвращает true (истину), если левое и правое условие true, в противном случае, возвращает false (ложь).

Вот здесь:

buttons & BT_FORWARD

Для определения клавиши, используется битовая маска, кому интересно, можете почитать в гугле.

Хорошо, таким образом, если мы нажмем на клавишу «вперед«, то на экране появится надпись «Forward«. По аналогии с этим, я создал остальные условия.

else if (buttons & BT_BACK)
    {
      print(s:"Backward");
    }
    else if (buttons & (BT_LEFT|BT_MOVELEFT))
    {
      print(s:"Left");
    }
    else if (buttons & (BT_LEFT|BT_MOVERIGHT))
    {
      print(s:"Right");
    }
    else
    {
      print(s:"Nothing");
    }

И в конце:

Delay(1);

Я добавил небольшую задержку, чтобы скрипт не завис.

Скрипт готов, время тестить.

Итоговый результат.

avatar

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!