Это вторая часть туториала Löve2D, основанного на старом (но золотом) туториале по pygame. Чтобы прочитать часть 01, нажмите здесь.

Итак, учитывая, что теперь мы являемся экспертами в области прямоугольников, мы могли бы стремиться к большему и попробовать что-то более смелое и реалистичное… например, изображение =D

Это изображение, которое мы будем использовать:

-- file: main.lua
local ball_img = nil
function love.load()
  -- load the image once and set it to ball_img
  ball_img = love.graphics.newImage("ball.png")
end
function love.draw()
  -- white background
  love.graphics.setBackgroundColor(1, 1, 1)
  -- draw our image in the position 20x20
  love.graphics.draw(ball_img, 20, 20)
end

Учитывая, что у вас есть файл conf.lua, как и раньше, приведенный выше фрагмент должен создать что-то вроде этого:

Наш код на этот раз довольно прост: учитывая, что ball.png находится в той же папке, что и наш файл main.lua, мы вызываем newImage изнутри love.load, чтобы загрузить изображение в ball_img. Внутри love.draw мы окрашиваем фон нашего окна в белый цвет (чтобы он соответствовал фону изображения) и рисуем изображение с помощью love.graphics.draw в желаемой позиции.

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

Я хочу услышать это!

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

Пожалуйста, перейдите в freemusicarchive и скачайте песню Ночная сова. Это будет наш звуковой файл.

local ball_img = nil
local music = nil
function love.load()
  -- load the image once and set it to ball_img
  ball_img = love.graphics.newImage("ball.png")
  
  -- mp3, ogg, wave and whatever libmodplug supports
  -- second argument can be stream or static; 
  -- stream reads from disk while static reads from loads and memory;
  music = love.audio.newSource('Night_Owl.mp3', 'stream')
  music:setLooping( true )  -- play on loop
  music:play()  -- play =D
end
function love.draw()
  -- white background
  love.graphics.setBackgroundColor(1, 1, 1)
  -- draw our image in the position 20x20
  love.graphics.draw(ball_img, 20, 20)
end

Добавить фоновую музыку в нашу демонстрацию довольно просто: загрузите звуковой файл, настройте его на циклическое воспроизведение и «воспроизведите». Одна вещь, которая может вызвать ваше любопытство, — это второй аргумент функции newSource. На самом деле это говорит любви, как следует обращаться с файлом. Если вторым аргументом является поток, файл будет прочитан с диска, что увеличивает нагрузку на диск, но экономит много памяти. Если установлено значение static, сжатый аудиофайл будет распакован и загружен в память. Небольшой файл размером 5 МБ может содержать до 50 МБ в памяти вашего компьютера после распаковки, поэтому используйте его с осторожностью.

Хороший вариант использования static — это когда вы хотите воспроизводить короткие звуки, когда происходит событие, например прыжок персонажа.

В этих случаях вы бы не хотели, чтобы звук воспроизводился в цикле, поэтому нет необходимости вызывать setLooping.

Пожалуйста, оставьте в комментариях свое мнение о второй части этого урока и подпишитесь! ; )