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

function love.mousepressed(x, y, button)
   if button == 1 then
      imgx = x -- переместить изображение туда, где мышь нажата
      imgy = y
   end
end

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

love.mousereleased

function love.mousereleased(x, y, button)
   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). Например, если пользователь закончил играть, он может нажать кнопку закрытия. Затем, перед закрытием, игра может сохранить свое состояние.

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



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