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

m (Sync to latest revision.)
m
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
メイン・ループを包括するメイン関数。省略時は認識可能な物を標準使用します。
+
メイン関数を包括しているメインループです。省略時は実用性のあるデフォルト関数を使用します。
 +
通常、指定を行う必要ありません。もし、指定を行う場合は <code>love.run</code> を自作関数でオーバーライドしてください。
 +
 
 
== 関数 ==
 
== 関数 ==
 +
{{newin (日本語)|[[11.0 (日本語)|11.0]]|110|type=異形}}
 +
=== 概要 ===
 +
<source lang="lua">
 +
mainLoop = love.run ( )
 +
</source>
 +
=== 引数 ===
 +
なし。
 +
=== 返値 ===
 +
{{param|function|mainLoop|イベントとレンダリングが呼び出された時にも用いる1フレーム処理用関数。}}
 +
== 関数 ==
 +
{{oldin (日本語)|[[11.0 (日本語)|11.0]]|110|type=異形}}
 
=== 概要 ===
 
=== 概要 ===
 
<source lang="lua">
 
<source lang="lua">
Line 10: Line 23:
 
ありません。
 
ありません。
 
== 用例 ==
 
== 用例 ==
=== なにも用意していないときに使用される [[0.10.0]], [[0.10.1]], および [[0.10.2]] の標準関数。 ===
+
=== 未指定時に使用される [[11.0 (日本語)|11.0]] 用のデフォルト関数です。 ===
 +
<source lang="lua">
 +
function love.run()
 +
if love.load then love.load(love.arg.parseGameArguments(arg), arg) end
 +
 
 +
-- 最初のフレームの dt へ love.load により取得された時間を算入しません。
 +
if love.timer then love.timer.step() end
 +
 
 +
local dt = 0
 +
 
 +
-- この区間はメインループです。
 +
return function()
 +
-- イベント処理。
 +
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
 +
 
 +
-- love.update へ渡すために、 dt (デルタタイム) を更新します。
 +
if love.timer then dt = love.timer.step() end
 +
 
 +
-- love.update と love.draw を呼び出します。
 +
if love.update then love.update(dt) end -- love.timer が無効ならば 0 を渡します。
 +
 
 +
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
 +
</source>
 +
 
 +
=== 未指定時に使用される [[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 20: Line 78:
 
if love.load then love.load(arg) end
 
if love.load then love.load(arg) end
  
-- 最初のフレームの dt へ love.load により取得された時間を算入しない。
+
-- 最初のフレームの dt へ love.load により取得された時間を算入しません。
 
if love.timer then love.timer.step() end
 
if love.timer then love.timer.step() end
  
 
local dt = 0
 
local dt = 0
  
-- この間はメインループです。
+
-- この区間はメインループです。
 
while true do
 
while true do
-- プロセスのイベント。
+
-- イベント処理。
 
if love.event then
 
if love.event then
 
love.event.pump()
 
love.event.pump()
Line 40: Line 98:
 
end
 
end
  
-- update へ渡すために、 dt を更新します。
+
-- love.update へ渡すために、 dt (デルタタイム) を更新します。
 
if love.timer then
 
if love.timer then
 
love.timer.step()
 
love.timer.step()
Line 46: Line 104:
 
end
 
end
  
-- update を呼び出して描画します。
+
-- love.update を呼び出して描画します。
 
if love.update then love.update(dt) end -- 0 を渡された場合は love.timer は無効になります。
 
if love.update then love.update(dt) end -- 0 を渡された場合は love.timer は無効になります。
  
Line 62: Line 120:
 
</source>
 
</source>
  
=== なにも用意していないときに使用される [[0.9.0]], [[0.9.1]], および [[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 77: Line 135:
 
if love.load then love.load(arg) end
 
if love.load then love.load(arg) end
  
-- 最初のフレームの dt へ love.load により取得された時間を算入しない。
+
-- 最初のフレームの dt へ love.load により取得された時間は算入しません。
 
if love.timer then love.timer.step() end
 
if love.timer then love.timer.step() end
  
 
local dt = 0
 
local dt = 0
  
-- この間はメインループです。
+
-- この区間はメインループです。
 
while true do
 
while true do
-- プロセスのイベント。
+
-- イベント処理。
 
if love.event then
 
if love.event then
 
love.event.pump()
 
love.event.pump()
Line 100: Line 158:
 
end
 
end
  
-- update へ渡すために、 dt を更新します。
+
-- love.update へ渡すために、 dt (デルタタイム) を更新します。
 +
 
 
if love.timer then
 
if love.timer then
 
love.timer.step()
 
love.timer.step()
Line 106: Line 165:
 
end
 
end
  
-- update を呼び出して描画します。
+
-- love.update を呼び出して描画します。
 
if love.update then love.update(dt) end -- 0 を渡された場合は love.timer は無効になります。
 
if love.update then love.update(dt) end -- 0 を渡された場合は love.timer は無効になります。
  
Line 122: Line 181:
 
</source>
 
</source>
  
=== なにも用意していないときに使用される [[0.8.0]] の標準関数。===
+
=== 未指定時に使用される [[0.8.0 (日本語)|0.8.0]] 用のデフォルト関数です。===
 
<source lang="lua">
 
<source lang="lua">
 
function love.run()
 
function love.run()
Line 133: Line 192:
 
local dt = 0
 
local dt = 0
  
-- この間はメインループです。
+
-- この区間はメインループです。
 
while true do
 
while true do
-- プロセスのイベント。
+
-- イベント処理。
 
if love.event then
 
if love.event then
 
love.event.pump()
 
love.event.pump()
Line 151: Line 210:
 
end
 
end
  
-- update へ渡すために、 dt を更新します。
+
-- love.update へ渡すために、 dt (デルタタイム) を更新します。
 
if love.timer then
 
if love.timer then
 
love.timer.step()
 
love.timer.step()
Line 157: Line 216:
 
end
 
end
  
-- update を呼び出して描画します。
+
-- love.update を呼び出して描画します。
 
if love.update then love.update(dt) end -- 0 を渡された場合は love.timer は無効になります。
 
if love.update then love.update(dt) end -- 0 を渡された場合は love.timer は無効になります。
 
if love.graphics then
 
if love.graphics then
Line 171: Line 230:
 
</source>
 
</source>
  
=== なにも用意していないときに使用される [[0.7.0]], [[0.7.1]] and [[0.7.2]] の標準関数。===
+
=== 未指定時に使用される [[0.7.0 (日本語)|0.7.0]], [[0.7.1 (日本語)|0.7.1]] および [[0.7.2 (日本語)|0.7.2]] の標準関数です。===
 
<source lang="lua">
 
<source lang="lua">
 
function love.run()
 
function love.run()
Line 179: Line 238:
 
local dt = 0
 
local dt = 0
  
-- この間はメインループです。
+
-- この区間はメインループです。
 
while true do
 
while true do
 
if love.timer then
 
if love.timer then
Line 191: Line 250:
 
end
 
end
  
-- プロセスのイベント。
+
-- イベント処理。
 
if love.event then
 
if love.event then
 
for e,a,b,c in love.event.poll() do
 
for e,a,b,c in love.event.poll() do
Line 214: Line 273:
  
 
== 注釈 ==
 
== 注釈 ==
=== なぜディレイを使用するのですか? ===
+
=== ディレイ(遅延時間挿入処理)を使用する理由は? ===
 
<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
 
</source>
 
</source>
  
それは少し便利です:
+
少し便利だからです:
* 垂直同期が使用不可能の場合に FPS を 1000 に制限します。
+
* 垂直同期が使用不可能の場合は FPS を 1000 に制限します。
* 多くの状況で CPU の使用率を大幅に削減します (特に垂直同期が使用不可能の状態では)。
+
* ほとんど場合に CPU の処理使用率を大幅に削減します (垂直同期の使用ができない場合は特に効果的です)。
* 暫くの間、オペレーティングシステムに制御を返します。
+
* しばらくの間、オペレーティングシステムへ制御を返します。
詳細情報は https://love2d.org/forums/viewtopic.php?f=4&t=76998 を参照してください。
+
詳細情報は [https://love2d.org/forums/viewtopic.php?f=4&t=76998 delay in love.run() - LÖVE]を参照してください。
 +
 
 
== 関連 ==
 
== 関連 ==
 
* [[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}}

Latest revision as of 05:11, 16 June 2019

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

関数

LÖVE 11.0 から使用可能
この異形は以前のバージョンでは非対応です。

概要

mainLoop = love.run ( )

引数

なし。

返値

function mainLoop
イベントとレンダリングが呼び出された時にも用いる1フレーム処理用関数。

関数

LÖVE 11.0 から廃止
この異形は以降のバージョンでは非対応です。

概要

love.run( )

引数

なし。

返値

ありません。

用例

未指定時に使用される 11.0 用のデフォルト関数です。

function love.run()
	if love.load then love.load(love.arg.parseGameArguments(arg), arg) end
 
	-- 最初のフレームの dt へ love.load により取得された時間を算入しません。
	if love.timer then love.timer.step() end
 
	local dt = 0
 
	-- この区間はメインループです。
	return function()
		-- イベント処理。
		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
 
		-- love.update へ渡すために、 dt (デルタタイム) を更新します。
		if love.timer then dt = love.timer.step() end
 
		-- love.update と love.draw を呼び出します。
		if love.update then love.update(dt) end -- love.timer が無効ならば 0 を渡します。
 
		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
 
	-- 最初のフレームの 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を参照してください。

関連


そのほかの言語