love.run (Русский)

Основная функция, содержащая главный цикл. Если упущена, то используется стандартная реализация этой функции.

Функция

Available since LÖVE 11.0
This variant is not supported in earlier versions.

Вид

mainLoop = love.run ( )

Аргументы

Нет.

Возвращает

function mainLoop
Функция, которая обрабатывает один кадр, включая события и отрисовку, когда вызывается.

Функция

Removed in LÖVE 11.0
This variant is not supported in that and later versions.

Вид

love.run( )

Аргументы

Нет.

Возвращает

Ничего.

Примеры

Стандартная функция для версии 11.0, используется, если вы не написали собственную.

function love.run()
	if love.load then love.load(love.arg.parseGameArguments(arg), arg) end

	-- We don't want the first frame's dt to include time taken by love.load.
	if love.timer then love.timer.step() end

	local dt = 0

	-- Main loop time.
	return function()
		-- Process events.
		if love.event then
			love.event.pump()
			for name, a,b,c,d,e,f in love.event.poll() do
				if name == "quit" then
					if not love.quit or not love.quit() then
						return a or 0
					end
				end
				love.handlers[name](a,b,c,d,e,f)
			end
		end

		-- Update dt, as we'll be passing it to update
		if love.timer then dt = love.timer.step() end

		-- Call update and draw
		if love.update then love.update(dt) end -- will pass 0 if love.timer is disabled

		if love.graphics and love.graphics.isActive() then
			love.graphics.origin()
			love.graphics.clear(love.graphics.getBackgroundColor())

			if love.draw then love.draw() end

			love.graphics.present()
		end

		if love.timer then love.timer.sleep(0.001) end
	end
end

Стандартная функция для версий 0.10.0, 0.10.1, и 0.10.2, используется, если вы не написали собственную.

function love.run()

	if love.math then
		love.math.setRandomSeed(os.time())
	end

	if love.load then love.load(arg) end

	-- We don't want the first frame's dt to include time taken by love.load.
	if love.timer then love.timer.step() end

	local dt = 0

	-- Main loop time.
	while true do
		-- Process events.
		if love.event then
			love.event.pump()
			for name, a,b,c,d,e,f in love.event.poll() do
				if name == "quit" then
					if not love.quit or not love.quit() then
						return a
					end
				end
				love.handlers[name](a,b,c,d,e,f)
			end
		end

		-- Update dt, as we'll be passing it to update
		if love.timer then
			love.timer.step()
			dt = love.timer.getDelta()
		end

		-- Call update and draw
		if love.update then love.update(dt) end -- will pass 0 if love.timer is disabled

		if love.graphics and love.graphics.isActive() then
			love.graphics.clear(love.graphics.getBackgroundColor())
			love.graphics.origin()
			if love.draw then love.draw() end
			love.graphics.present()
		end

		if love.timer then love.timer.sleep(0.001) end
	end

end

Стандартная функция для версий 0.9.0, 0.9.1, и 0.9.2, используется, если вы не написали собственную.

function love.run()

	if love.math then
		love.math.setRandomSeed(os.time())
		for i=1,3 do love.math.random() end
	end

	if love.event then
		love.event.pump()
	end

	if love.load then love.load(arg) end

	-- We don't want the first frame's dt to include time taken by love.load.
	if love.timer then love.timer.step() end

	local dt = 0

	-- Main loop time.
	while true do
		-- Process events.
		if love.event then
			love.event.pump()
			for e,a,b,c,d in love.event.poll() do
				if e == "quit" then
					if not love.quit or not love.quit() then
						if love.audio then
							love.audio.stop()
						end
						return
					end
				end
				love.handlers[e](a,b,c,d)
			end
		end

		-- Update dt, as we'll be passing it to update
		if love.timer then
			love.timer.step()
			dt = love.timer.getDelta()
		end

		-- Call update and draw
		if love.update then love.update(dt) end -- will pass 0 if love.timer is disabled

		if love.window and love.graphics and love.window.isCreated() then
			love.graphics.clear()
			love.graphics.origin()
			if love.draw then love.draw() end
			love.graphics.present()
		end

		if love.timer then love.timer.sleep(0.001) end
	end

end

Стандартная функция для версии 0.8.0, используется, если вы не написали собственную.

function love.run()

	math.randomseed(os.time())
	math.random() math.random()

	if love.load then love.load(arg) end

	local dt = 0

	-- Main loop time.
	while true do
		-- Process events.
		if love.event then
			love.event.pump()
			for e,a,b,c,d in love.event.poll() do
				if e == "quit" then
					if not love.quit or not love.quit() then
						if love.audio then
							love.audio.stop()
						end
						return
					end
				end
				love.handlers[e](a,b,c,d)
			end
		end

		-- Update dt, as we'll be passing it to update
		if love.timer then
			love.timer.step()
			dt = love.timer.getDelta()
		end

		-- Call update and draw
		if love.update then love.update(dt) end -- will pass 0 if love.timer is disabled
		if love.graphics then
			love.graphics.clear()
			if love.draw then love.draw() end
		end

		if love.timer then love.timer.sleep(0.001) end
		if love.graphics then love.graphics.present() end
	end

end

Стандартная функция для версий 0.7.0, 0.7.1 и 0.7.2, используется, если вы не написали собственную.

function love.run()

	if love.load then love.load(arg) end

	local dt = 0

	-- Основной цикл.
	while true do
		if love.timer then
			love.timer.step()
			dt = love.timer.getDelta()
		end
		if love.update then love.update(dt) end -- вернет 0, если love.timer не включен
		if love.graphics then
			love.graphics.clear()
			if love.draw then love.draw() end
		end

		-- Обработка событий.
		if love.event then
			for e,a,b,c in love.event.poll() do
				if e == "q" then
					if not love.quit or not love.quit() then
						if love.audio then
							love.audio.stop()
						end
						return
					end
				end
				love.handlers[e](a,b,c)
			end
		end

		if love.timer then love.timer.sleep(1) end
		if love.graphics then love.graphics.present() end

	end

end

Стандартная функция для версии 0.6.1, используется, если вы не написали собственную.

function love.run()

	if love.load then love.load(arg) end

	local dt = 0

	-- Основной цикл.
	while true do
		if love.timer then
			love.timer.step()
			dt = love.timer.getDelta()
		end
		if love.update then love.update(dt) end -- вернет 0, если love.timer не включен
		if love.graphics then
			love.graphics.clear()
			if love.draw then love.draw() end
		end

		-- Обработка событий.
		if love.event then
			for e,a,b,c in love.event.poll() do
				if e == "q" then
					if love.audio then
						love.audio.stop()
					end
					return
				end
				love.handlers[e](a,b,c)
			end
		end

		if love.timer then love.timer.sleep(1) end
		if love.graphics then love.graphics.present() end

	end

end

Стандартная функция для версии 0.6.0, используется, если вы не написали собственную.

function love.run()
 
	if love.load then love.load() end
 
	-- Основной цикл.
	while true do
 
		love.timer.step()
		if love.update then love.update(love.timer.getDelta()) end
		love.graphics.clear()
		if love.draw then love.draw() end
 
		-- Обработка событий.
		for e,a,b,c in love.event.poll() do
			if e == 'q' then
				if love.audio then
 					love.audio.stop()
				end
				return
			end
			love.handlers[e](a,b,c)
		end
		love.timer.sleep(1)
 
		love.graphics.present()
 
	end
 
end

Заметки

Почему там задержка?

if love.timer then love.timer.sleep(0.001) end

Это делает несколько полезных вещей:

  • Ограничение FPS до 1000 если вертикальная синхронизация не включена.
  • Уменьшает использование CPU во многих ситуациях (особенно с выключенной вертикальной синхронизацией).
  • Возвращает управление ОС на немного.

Для подробной информации смотрите https://love2d.org/forums/viewtopic.php?f=4&t=76998.

Смотри также


Другие языки