Difference between revisions of "love.run (日本語)"
m (Sync to latest revision.) |
m (→ディレイ(遅延時間挿入処理)を使用する理由は?) |
||
(9 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| | ||
+ | |||
+ | 呼び出し時、イベントとレンダリングから構成される単フレームの処理関数。}} | ||
== 関数 == | == 関数 == | ||
+ | {{oldin (日本語)|[[11.0 (日本語)|11.0]]|110|type=異形}} | ||
=== 概要 === | === 概要 === | ||
<source lang="lua"> | <source lang="lua"> | ||
Line 10: | Line 26: | ||
ありません。 | ありません。 | ||
== 用例 == | == 用例 == | ||
− | === | + | === デフォルト関数 ([[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 81: | ||
if love.load then love.load(arg) end | if love.load then love.load(arg) end | ||
− | -- 最初のフレームの dt | + | -- 最初のフレームの 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 101: | ||
end | end | ||
− | -- update へ渡すために、 dt を更新します。 | + | -- love.update へ渡すために、 dt (デルタタイム) を更新します。 |
if love.timer then | if love.timer then | ||
love.timer.step() | love.timer.step() | ||
Line 46: | Line 107: | ||
end | end | ||
− | -- update を呼び出して描画します。 | + | -- love.update を呼び出して描画します。 |
− | if love.update then love.update(dt) end -- 0 | + | if love.update then love.update(dt) end -- 0 が渡されると love.timer は無効になります。 |
if love.graphics and love.graphics.isActive() then | if love.graphics and love.graphics.isActive() then | ||
Line 62: | Line 123: | ||
</source> | </source> | ||
− | === | + | === デフォルト関数 ([[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 138: | ||
if love.load then love.load(arg) end | if love.load then love.load(arg) end | ||
− | -- 最初のフレームの dt | + | -- 最初のフレームの 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 161: | ||
end | end | ||
− | -- update へ渡すために、 dt を更新します。 | + | -- love.update へ渡すために、 dt (デルタタイム) を更新します。 |
+ | |||
if love.timer then | if love.timer then | ||
love.timer.step() | love.timer.step() | ||
Line 106: | Line 168: | ||
end | end | ||
− | -- update を呼び出して描画します。 | + | -- love.update を呼び出して描画します。 |
− | if love.update then love.update(dt) end -- 0 | + | if love.update then love.update(dt) end -- 0 が渡されると love.timer は無効になります。 |
if love.window and love.graphics and love.window.isCreated() then | if love.window and love.graphics and love.window.isCreated() then | ||
Line 122: | Line 184: | ||
</source> | </source> | ||
− | === | + | === デフォルト関数 ([[0.8.0 (日本語)|0.8.0]]) === |
<source lang="lua"> | <source lang="lua"> | ||
function love.run() | function love.run() | ||
Line 133: | Line 195: | ||
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 213: | ||
end | end | ||
− | -- update へ渡すために、 dt を更新します。 | + | -- love.update へ渡すために、 dt (デルタタイム) を更新します。 |
if love.timer then | if love.timer then | ||
love.timer.step() | love.timer.step() | ||
Line 157: | Line 219: | ||
end | end | ||
− | -- update を呼び出して描画します。 | + | -- love.update を呼び出して描画します。 |
− | if love.update then love.update(dt) end -- 0 | + | if love.update then love.update(dt) end -- 0 が渡されると love.timer は無効になります。 |
if love.graphics then | if love.graphics then | ||
love.graphics.clear() | love.graphics.clear() | ||
Line 171: | Line 233: | ||
</source> | </source> | ||
− | === | + | === デフォルト関数 ([[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 241: | ||
local dt = 0 | local dt = 0 | ||
− | -- | + | -- この区間はメインループです。 |
while true do | while true do | ||
if love.timer then | if love.timer then | ||
Line 185: | Line 247: | ||
dt = love.timer.getDelta() | dt = love.timer.getDelta() | ||
end | end | ||
− | if love.update then love.update(dt) end -- 0 | + | if love.update then love.update(dt) end -- 0 が渡されると love.timer は無効になります。 |
if love.graphics then | if love.graphics then | ||
love.graphics.clear() | love.graphics.clear() | ||
Line 191: | Line 253: | ||
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 276: | ||
== 注釈 == | == 注釈 == | ||
− | === | + | === ディレイ(遅延時間挿入処理)を使用する理由は? === |
<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 に制限します。 |
− | * | + | * ほとんどの状況下で 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 12:18, 22 June 2023
メインループを構成するメイン関数です。省略時は該当するデフォルト関数を使います。
通常は定義不要です。定義時は love.run
を自作関数でオーバーライドしてください。
Contents
関数
LÖVE 11.0 から使用可能 |
この異形は以前のバージョンでは非対応です。 |
概要
mainLoop = love.run ( )
引数
なし。
返値
function mainLoop
呼び出し時、イベントとレンダリングから構成される単フレームの処理関数。
関数
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を参照してください。
関連