love.run (日本語)

メイン関数を包括しているメインループです。省略時は実用性のあるデフォルト関数を使用します。 通常、指定を行う必要ありません。もし、指定を行う場合は love.run を自作関数でオーバーライドしてください。

関数

概要

love.run( )

引数

なし。

返値

ありません。

用例

未指定時に使用される 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
 
	-- 最初のフレームの dt へ love.load により取得された時間を算入しません。
	if love.timer then love.timer.step() end
 
	local dt = 0
 
	-- この区間はメインループです。
	while true do
		-- プロセスのイベント。
		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
 
		-- love.update へ渡すために、 dt (デルタタイム) を更新します。
		if love.timer then
			love.timer.step()
			dt = love.timer.getDelta()
		end
 
		-- love.update を呼び出して描画します。
		if love.update then love.update(dt) end -- 0 を渡された場合は love.timer は無効になります。
 
		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
 
	-- 最初のフレームの dt へ love.load により取得された時間は算入しません。
	if love.timer then love.timer.step() end
 
	local dt = 0
 
	-- この区間はメインループです。
	while true do
		-- プロセスのイベント。
		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
 
		-- love.update へ渡すために、 dt (デルタタイム) を更新します。
 
		if love.timer then
			love.timer.step()
			dt = love.timer.getDelta()
		end
 
		-- love.update を呼び出して描画します。
		if love.update then love.update(dt) end -- 0 を渡された場合は love.timer は無効になります。
 
		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
 
	-- この区間はメインループです。
	while true do
		-- プロセスのイベント。
		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
 
		-- love.update へ渡すために、 dt (デルタタイム) を更新します。
		if love.timer then
			love.timer.step()
			dt = love.timer.getDelta()
		end
 
		-- love.update を呼び出して描画します。
		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.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

注釈

ディレイ(遅延時間挿入処理)を使用する理由は??

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

それは少し便利だからです:

  • 垂直同期が使用不可能の場合は FPS を 1000 に制限します。
  • 多くの状況で CPU の処理使用率を大幅に削減します (垂直同期の使用ができない場合は特に効果的です)。
  • しばらくの間、オペレーティングシステムへ制御を返します。

詳細情報は delay in love.run() - LÖVEを参照してください。

関連


そのほかの言語