Difference between revisions of "love.run (日本語)"

m (Translation improved. (誤訳の修正など))
m
Line 1: Line 1:
メイン関数を包括しているメインループです。省略時は実用性なデフォルトの関数を使用します。
+
メイン関数を包括しているメインループです。省略時は実用性のあるデフォルト関数を使用します。
 
通常、指定を行う必要ありません。もし、指定を行う場合は <code>love.run</code> を自作関数でオーバーライドしてください。
 
通常、指定を行う必要ありません。もし、指定を行う場合は <code>love.run</code> を自作関数でオーバーライドしてください。
  
Line 12: Line 12:
 
ありません。
 
ありません。
 
== 用例 ==
 
== 用例 ==
=== 未指定時に使用される [[0.10.0 (日本語)|0.10.0]], [[0.10.1 (日本語)|0.10.1]], および [[0.10.2 (日本語)|0.10.2]] のデフォルトの関数です。 ===
+
=== 未指定時に使用される [[0.10.0 (日本語)|0.10.0]], [[0.10.1 (日本語)|0.10.1]], および [[0.10.2 (日本語)|0.10.2]] 用のデフォルト関数です。 ===
 
<source lang="lua">
 
<source lang="lua">
 
function love.run()
 
function love.run()
Line 64: Line 64:
 
</source>
 
</source>
  
=== 未指定時に使用される [[0.9.0 (日本語)|0.9.0]], [[0.9.1 (日本語)|0.9.1]], および [[0.9.2 (日本語)|0.9.2]] の標準関数です。 ===
+
=== 未指定時に使用される [[0.9.0 (日本語)|0.9.0]], [[0.9.1 (日本語)|0.9.1]], および [[0.9.2 (日本語)|0.9.2]] 用のデフォルト関数です。 ===
 
<source lang="lua">
 
<source lang="lua">
 
function love.run()
 
function love.run()
Line 125: Line 125:
 
</source>
 
</source>
  
=== 未指定時に使用される [[0.8.0 (日本語)|0.8.0]] の標準関数。===
+
=== 未指定時に使用される [[0.8.0 (日本語)|0.8.0]] 用のデフォルト関数です。===
 
<source lang="lua">
 
<source lang="lua">
 
function love.run()
 
function love.run()
Line 217: Line 217:
  
 
== 注釈 ==
 
== 注釈 ==
=== なぜディレイを使用するのですか? ===
+
=== なぜディレイ(遅延時間挿入処理)を使用するのですか? ===
 
<source lang="lua">
 
<source lang="lua">
 
if love.timer then love.timer.sleep(0.001) end
 
if love.timer then love.timer.sleep(0.001) end
Line 231: Line 231:
 
* [[parent::love (日本語)]]
 
* [[parent::love (日本語)]]
 
[[Category:Callbacks]]
 
[[Category:Callbacks]]
{{#set:Description=メイン関数を包括しているメインループです。省略時は実用性なデフォルトの関数を使用します。}}
+
{{#set:Description=メイン関数を包括しているメインループです。省略時は実用性のあるデフォルト関数を使用します。}}
 
{{#set:Subcategory=General}}
 
{{#set:Subcategory=General}}
 
{{#set:Since=000}}
 
{{#set:Since=000}}
 
== そのほかの言語 ==
 
== そのほかの言語 ==
 
{{i18n|love.run}}
 
{{i18n|love.run}}

Revision as of 05:52, 29 September 2017

メイン関数を包括しているメインループです。省略時は実用性のあるデフォルト関数を使用します。 通常、指定を行う必要ありません。もし、指定を行う場合は 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を参照してください。

関連


そのほかの言語