Tutorial:Callback Functions (Русский)

Функции обратного вызова в LÖVE используются движком для выполнения различных задач, и все они необязательны. Тем не менее, полнофункциональный игровой процесс, чаще всего, использует почти все, так что целесообразно узнать, какие есть, и что они делают.

love.load

function love.load()
   image = love.graphics.newImage("cake.jpg")
   local f = love.graphics.newFont(12)
   love.graphics.setFont(f)
   love.graphics.setColor(0,0,0,255)
   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' обозначает "изменение (дельту) времени" и является количеством секунд, прошедших с последнего раза, как эта функция была вызвана (обычно малое значение, такое как 0,025714).

love.draw

function love.draw()
   love.graphics.draw(image, imgx, imgy)
   love.graphics.print("Чтобы переместить торт, щелкните по нему и передвигайте мышь или используйте клавиши со стрелками.", 10, 10)
end

В функции love.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

Available since LÖVE 0.10.0
This variant is not supported in earlier versions.
function love.mousepressed(x, y, button, istouch)
   if button == 1 then
      imgx = x -- переместить изображение туда, где мышь нажата
      imgy = y
   end
end

Эта функция вызывается всякий раз, когда нажата кнопка мыши, и получает кнопки и координаты, где кнопки были нажаты. Кнопкой может быть любая из констант. Эта функция очень хорошо работает с функцией love.mousereleased.

love.mousereleased

Available since LÖVE 0.10.0
This variant is not supported in earlier versions.
function love.mousereleased(x, y, button, istouch)
   if button == 1 then
      fireSlingshot(x,y) -- это пользовательская функция определённая в другом месте
   end
end

Эта функция вызывается всякий раз, когда отпущена кнопка мыши, и получает кнопки и координаты, где кнопки были отпущены. Вы можете использовать эту функцию совместно с функцией love.mousepressed или отдельно, так как они никак не связаны.


love.keypressed

function love.keypressed(key, unicode)
   if key == 'b' then
      text = "Клавиша B была нажата."
   elseif key == 'a' then
      a_down = true
   end
end

Эта функция вызывается всякий раз, когда нажата клавиша на клавиатуре, и получает кнопки, которые были нажаты. Кнопкой может быть любая из констант. Эта функция очень хорошо работает с функцией love.keyreleased.

love.keyreleased

function love.keyreleased(key, unicode)
   if key == 'b' then
      text = "Клавиша B была отпущена."
   elseif key == 'a' then
      a_down = false
   end
end

Эта функция вызывается всякий раз, когда отпущена клавиша на клавиатуре, и получает кнопки, которые были отпущены. Вы можете использовать эту функцию совместно с функцией love.keypressed или отдельно, так как они никак не связаны.

love.focus

function love.focus(f)
  if not f then
    print("ФОКУС ПОТЕРЯН")
  else
    print("ФОКУС ПОЛУЧЕН")
  end
end

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

love.quit

function love.quit()
  print("Спасибо за игру! Возвращайтесь скорее!")
end

Эта функция вызывается всякий раз, когда пользователь нажимает кнопку закрытия окна (часто X или Q). Например, если пользователь закончил играть, он может нажать кнопку закрытия. Затем, перед закрытием, игра может сохранить свое состояние.

Таковы функции обратного вызова и их основные применения.



На других языках