Difference between revisions of "love.run (日本語)"
m (→注釈) |
m (translation updated) |
||
Line 3: | Line 3: | ||
== 関数 == | == 関数 == | ||
+ | {{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 12: | Line 23: | ||
ありません。 | ありません。 | ||
== 用例 == | == 用例 == | ||
+ | === 未指定時に使用される [[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]] 用のデフォルト関数です。 === | === 未指定時に使用される [[0.10.0 (日本語)|0.10.0]], [[0.10.1 (日本語)|0.10.1]], および [[0.10.2 (日本語)|0.10.2]] 用のデフォルト関数です。 === | ||
<source lang="lua"> | <source lang="lua"> | ||
Line 29: | Line 85: | ||
-- この区間はメインループです。 | -- この区間はメインループです。 | ||
while true do | while true do | ||
− | -- | + | -- イベント処理。 |
if love.event then | if love.event then | ||
love.event.pump() | love.event.pump() | ||
Line 86: | Line 142: | ||
-- この区間はメインループです。 | -- この区間はメインループです。 | ||
while true do | while true do | ||
− | -- | + | -- イベント処理。 |
if love.event then | if love.event then | ||
love.event.pump() | love.event.pump() | ||
Line 138: | Line 194: | ||
-- この区間はメインループです。 | -- この区間はメインループです。 | ||
while true do | while true do | ||
− | -- | + | -- イベント処理。 |
if love.event then | if love.event then | ||
love.event.pump() | love.event.pump() | ||
Line 194: | 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 217: | 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 の処理使用率を大幅に削減します (垂直同期の使用ができない場合は特に効果的です)。 |
* しばらくの間、オペレーティングシステムへ制御を返します。 | * しばらくの間、オペレーティングシステムへ制御を返します。 | ||
詳細情報は [https://love2d.org/forums/viewtopic.php?f=4&t=76998 delay in love.run() - LÖVE]を参照してください。 | 詳細情報は [https://love2d.org/forums/viewtopic.php?f=4&t=76998 delay in love.run() - LÖVE]を参照してください。 | ||
Line 235: | Line 291: | ||
{{#set:Since=000}} | {{#set:Since=000}} | ||
== そのほかの言語 == | == そのほかの言語 == | ||
− | {{i18n|love.run}} | + | {{i18n (日本語)|love.run}} |
Revision as of 04:01, 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を参照してください。
関連