Tutorial:Callback Functions (Українська)

Функції зворотного виклику в LÖVE викликаються функцією love.run для виконання різних задач, і всі вони необов'язкові. Однак для створення повного занурення в гру вам, напевне, доведеться використати більшу їх частину, тому важно значить, які функції доступні.

Для тих, хто починає програмувати чи не знаю цього терміну: функція зворотного виклику — це функція навпаки. Звичайна ви викликаєте функцію, наприклад love.graphics.draw чи math.floor, щоб LÖVE чи Lua щось зробили. А функції зворотного виклику — це функції, які пишете ви самі, а LÖVE іноді їх викликає. Це дозволяє організувати та оптимізувати код. Наприклад, love.load викликається тільки тоді, коли гра запускається (перед будь-якою іншою функцією зворотного виклику), тому в ній можна написати код, який завантажуватиме ігрові ресурси та підготує ігрові об'єкти.

love.load

function love.load()
   image = love.graphics.newImage("cake.jpg")
   love.graphics.setNewFont(12)
   love.graphics.setColor(0,0,0)
   love.graphics.setBackgroundColor(255,255,255)
end

Ця функція викликається тільки один раз, коли гра запускається, і звичайно в ній пишуть код для завантаження ресурсів, ініціалізації змінних та встановлення налаштувань. Все це можна робити і в інших функціях, але ця функція виконується тільки один раз — тому вона не буде потребувати багато системних ресурсів.

love.update

function love.update(dt)
   if love.keyboard.isDown("up") then
      num = num + 100 * dt -- змінна num буде збільшуватися на 100 щосекунди
   end
end

Ця функція викликається весь час. Скоріше за все, більшість ваших розрахунків буде в ній. 'dt' значить "дельта-час (delta time)" — це кількість секунд, які пройшли після попереднього виклику цієї функції (звичайно це мале число, наприклад, 0.025714).

love.draw

function love.draw()
   love.graphics.draw(image, imgx, imgy)
   love.graphics.print("Click and drag the cake around or use the arrow keys", 10, 10)
end

love.draw — це місце, де виконується код малювання (це можна зрозуміти з назви: draw значить намалювати). Всі функції з love.graphics.draw мають виконуватися тільки тут — якщо викликати їх в іншому місці, нічого не намалюється. Ця функція також викликається постійно, тому майте на увазі: якщо змінити шрифт/колір/режим/і т.і. в кінці цієї функції, це повпливає на код і на початку. Наприклад:

function love.load()
   love.graphics.setColor(0,0,0)
end

function love.draw()
   love.graphics.print("Цей текст не чорний через наступний рядок", 100, 100)
   love.graphics.setColor(255,0,0)
   love.graphics.print("Цей текст червоний", 100, 200)
end

love.mousepressed

Доступне починаючи з LÖVE 0.10.0
Цей варіант недоступний в попередніх версіях.
function love.mousepressed(x, y, button, istouch)
   if button == 1 then
      imgx = x -- пересунути зображення до місця, де натиснуто мишкою
      imgy = y
   end
end

Ця функція викликається тоді, коли натиснуто на клавішу миші, і їй передається натиснута кнопка та координати місця, де був курсор (x та y). Кнопка (button) — це номер кнопки, і доступні всі кнопки, що є на миші. Цю функцію зручно використовувати разом з love.mousereleased (функцією відпускання миші).

love.mousereleased

Доступне починаючи з LÖVE 0.10.0
Цей варіант недоступний в попередніх версіях.
function love.mousereleased(x, y, button, istouch)
   if button == 1 then
      fireSlingshot(x,y) -- код цією чудової функції записаний десь в іншому місці
   end
end

Ця функція викликається тоді, коли закінчується натискання на кнопку миші, і вона отримує номер кнопки (button) і координати місця відпускання кнопки. Її можна використовувати і разом з love.mousepressed (функцією початку натискання), і окремо, вони працюють незалежно.

love.keypressed

function love.keypressed(key)
   if key == 'b' then
      text = "Натиснуто на клавішу B (И)."
   elseif key == 'a' then
      a_down = true
   end
end

Ця функція викликається, коли натиснуто на будь-яку клавішу на клавіатурі, і їй передається натиснута клавіша. Клавіша може будь однією з констант. Цю функцію зручно використовувати разом з love.keyreleased.

love.keyreleased

function love.keyreleased(key)
   if key == 'b' then
      text = "Клавішу B (И) відпущено."
   elseif key == 'a' then
      a_down = false
   end
end

Ця функція викликається, коли будь яку клавішу на клавіатурі відпущено, і їй передається клавіша (key), яка була відпущена. Цю функцію можна використовувати і разом з love.keypressed, і окремо, вони працюють незалежно.

love.focus

function love.focus(f)
  if not f then
    print("ФОКУС ЗГУБЛЕНО")
  else
    print("ФОКУС ОТРИМАНО")
  end
end

Ця функція викликається, коли гравець чи гравчиня натискає на щось за межами вікна LÖVE. Наприклад, коли гру запущено в вікні, і гравчиня переходить до Інтернет-браузеру, в гра може отримати про це повідомлення і включити режим паузи.

function love.focus(f) 
	-- змінна gameIsPaused визначає, чи зараз активна пауза 
	gameIsPaused = not f
end

function love.update(dt)
	if gameIsPaused then return end

	-- Тут буде інший код для love.update
end

love.quit

function love.quit()
  print("Thanks for playing! Come back soon!")
end

Ця функція викликається тоді, коли гравець чи гравчиня натисне на кнопку закриття вікна (часто на ній намальований хрестик). Наприклад, якщо гравець вирішую закінчити гру, це можна зробити кнопкою закриття. Тоді гра може зберегти зміни перед тим, як закритися.

Вище були перераховані основні функції зворотного виклику та пояснено, де вони використовуються.


Іншими мовами