Difference between revisions of "Tutorial:Callback Functions (日本語)"
(Wrote Callback-Functions tutorial in japanese.) |
(日本語訳の追加と修正) |
||
Line 1: | Line 1: | ||
− | + | LÖVEの[[:Category:Callbacks|コールバック関数]]は、[[love.run]]から様々なタスクを実行するために呼ばれる、オプショナルな関数です。しかし、フル機能のゲーム体験のために、おそらくほとんどすべてのコールバック関数を利用するので、それが何であるかを知っておくのが賢明でしょう。 | |
− | + | プログラミング初心者や、コールバックをご存じない方の為にに申し上げれば、コールバックは、ある意味で逆方向に動作する関数です。一般的な関数、たとえば[[love.graphics.draw]]やmath.floorといった関数は、プログラムの中であなたが関数を呼び出すと、LÖVEやLuaが何か作業を行います。一方、コールバックは自分で中身を書く関数で、ある決められた場面で、LÖVEがその関数を呼び出します。これによって簡単に、あなたのコードを整理された最適な状態に保っておくことができるようになります。一例を挙げれば、love.loadというコールバック関数は、ゲームが開始された直後、他のコールバック関数が呼び出される前に一度だけ呼び出されるので、ゲームコンテンツをロードしたり、何かの準備をするコードを書くのにちょうどいい関数です。 | |
==[[love.load]]== | ==[[love.load]]== | ||
Line 13: | Line 13: | ||
end | end | ||
</source> | </source> | ||
− | + | <code>love.load</code>は、ゲームが開始されたときに、一度だけ呼ばれます。通常はこの関数でリソースをロードしたり、変数を初期化したり、特定の設定を行います。これらの作業は他の場所に書いても同様に実行されますが、<code>love.load</code>に書けば、その作業が一度だけ行われることを意味するので、多くのシステムリソースを節約することができます。 | |
==[[love.update]]== | ==[[love.update]]== | ||
Line 19: | Line 19: | ||
function love.update(dt) | function love.update(dt) | ||
if love.keyboard.isDown("up") then | if love.keyboard.isDown("up") then | ||
− | num = num + 100 * dt -- | + | num = num + 100 * dt -- 1秒あたり100ずつnumをインクリメントする |
end | end | ||
end | end | ||
</source> | </source> | ||
− | + | <code>love.update</code>は、ゲーム中ずっと呼び出されつづけます。ゲームのための計算のほとんどはこの関数で行われるでしょう。'dt'は[[love.timer.getDelta|デルタ・タイム]]の略で、<code>love.update</code>が最後に前回呼び出された時間からの経過秒数を表しています。(通常、デルタ・タイムは0.025714のような小さな値です) | |
==[[love.draw]]== | ==[[love.draw]]== | ||
Line 32: | Line 32: | ||
end | end | ||
</source> | </source> | ||
− | <code> | + | <code>love.draw</code>は(名前から既に十分明々白々でしょうが)すべての描画(ドロー)を行う関数です。<code>[[love.graphics.draw]]</code>などの描画を行う関数はすべて<code>love.draw</code>の中から呼び出す必要があり、<code>love.draw</code>以外から呼び出しても何も描画されません。この関数も<code>love.update</code>と同様ゲーム中ずっと呼び出されつづけるので、関数の末尾でfont・color・modeなどを変更した場合、それは関数の先頭に影響を与えることに留意してください。次のコードはその一例です。 |
<source lang="lua"> | <source lang="lua"> | ||
function love.load() | function love.load() | ||
− | love.graphics.setColor(0,0,0) | + | love.graphics.setColor(0,0,0) -- テキストの色を黒に変えます |
end | end | ||
function love.draw() | function love.draw() | ||
− | love.graphics.print("This text is not black because of the line below", 100, 100) | + | love.graphics.print("This text is not black because of the line below", 100, 100) -- 下の行の影響で、このテキストは黒ではなく赤くなります |
− | love.graphics.setColor(255,0,0) | + | love.graphics.setColor(255,0,0) -- テキストの色を赤に変えます |
− | love.graphics.print("This text is red", 100, 200) | + | love.graphics.print("This text is red", 100, 200) -- このテキストは(もちろん)赤くなります |
end | end | ||
</source> | </source> | ||
− | '' | + | ==[[love.mousepressed]]== |
+ | <source lang="lua"> | ||
+ | function love.mousepressed(x, y, button) | ||
+ | if button == 'l' then | ||
+ | imgx = x -- クリックされた位置にイメージを動かす | ||
+ | imgy = y | ||
+ | end | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | <code>love.mousepressed</code>はマウスボタンが押されたときに呼び出され、マウスカーソルの位置と押されたボタンが関数に受け渡されます。<code>button</code>変数の値は[[MouseConstant|マウスボタン定数]]の中のいずれかです。This function goes very well along with <code>love.mousereleased</code>. | ||
+ | |||
+ | ==[[love.mousereleased]]== | ||
+ | <source lang="lua"> | ||
+ | function love.mousereleased(x, y, button) | ||
+ | if button == 'l' then | ||
+ | fireSlingshot(x,y) -- this totally awesome custom function is defined elsewhere | ||
+ | end | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | <code>love.mousereleased</code>はマウスボタンが離されたときに呼び出され、マウスカーソルの位置と離されたボタンが関数に受け渡されます。You can have this function together with <code>love.mousepressed</code> or separate, they aren't connected in any way. | ||
+ | |||
+ | |||
+ | ==[[love.keypressed]]== | ||
+ | <source lang="lua"> | ||
+ | function love.keypressed(key, unicode) | ||
+ | if key == 'b' then | ||
+ | text = "The B key was pressed." | ||
+ | elseif key == 'a' then | ||
+ | a_down = true | ||
+ | end | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | <code>love.keypressed</code>はキーボードのキーが押されたときに呼び出され、押されたキーが関数に受け渡されます。<code>key</code>変数の値は[[MouseConstant|キー定数]]の中のいずれかです。This functions goes very well along with <code>love.keyreleased</code>. | ||
+ | |||
+ | ==[[love.keyreleased]]== | ||
+ | <source lang="lua"> | ||
+ | function love.keyreleased(key, unicode) | ||
+ | if key == 'b' then | ||
+ | text = "The B key was released." | ||
+ | elseif key == 'a' then | ||
+ | a_down = false | ||
+ | end | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | <code>love.keyreleased</code>はキーボードのキーが離されたときに呼び出され、離されたキーが関数に受け渡されます。You can have this function together with <code>love.keypressed</code> or separate, they aren't connected in any way. | ||
+ | |||
+ | ==[[love.focus]]== | ||
+ | <source lang="lua"> | ||
+ | function love.focus(f) | ||
+ | if not f then | ||
+ | print("LOST FOCUS") | ||
+ | else | ||
+ | print("GAINED FOCUS") | ||
+ | end | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | <code>love.focus</code>はLÖVEのウィンドウの外や中がクリックされて、フォーカスが移動したときに呼び出されます。例えば、ゲームをプレイ中にプレイヤーがインターネットブラウザーをクリックしたときにはこの関数が呼び出されるので、ゲームを自動的にポーズすることができます。 | ||
+ | |||
+ | <source lang="lua"> | ||
+ | function love.focus(f) gameIsPaused = not f end | ||
+ | |||
+ | function love.update(dt) | ||
+ | if gameIsPaused then return end | ||
+ | -- 以下に自分で残りのコードを書く | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | ==[[love.quit]]== | ||
+ | <source lang="lua"> | ||
+ | function love.quit() | ||
+ | print("Thanks for playing! Come back soon!") | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | <code>love.quit</code>はウィンドウのクローズボタン(大抵×印が付いているボタン)がクリックされたときに呼び出されます。たとえば、プレイヤーがゲームをやめようとしてクローズボタンを押すと、ウィンドウが閉じる前にこの関数が呼び出されるので、ゲームの状態をセーブしておくことができます。 | ||
− | + | 以上がコールバック関数とその基本的な使い方です。 | |
[[Category:Tutorials]] | [[Category:Tutorials]] |
Revision as of 08:39, 23 November 2012
LÖVEのコールバック関数は、love.runから様々なタスクを実行するために呼ばれる、オプショナルな関数です。しかし、フル機能のゲーム体験のために、おそらくほとんどすべてのコールバック関数を利用するので、それが何であるかを知っておくのが賢明でしょう。
プログラミング初心者や、コールバックをご存じない方の為にに申し上げれば、コールバックは、ある意味で逆方向に動作する関数です。一般的な関数、たとえばlove.graphics.drawやmath.floorといった関数は、プログラムの中であなたが関数を呼び出すと、LÖVEやLuaが何か作業を行います。一方、コールバックは自分で中身を書く関数で、ある決められた場面で、LÖVEがその関数を呼び出します。これによって簡単に、あなたのコードを整理された最適な状態に保っておくことができるようになります。一例を挙げれば、love.loadというコールバック関数は、ゲームが開始された直後、他のコールバック関数が呼び出される前に一度だけ呼び出されるので、ゲームコンテンツをロードしたり、何かの準備をするコードを書くのにちょうどいい関数です。
Contents
love.load
function love.load()
image = love.graphics.newImage("cake.jpg")
local f = love.graphics.newFont(12)
love.graphics.setFont(f)
love.graphics.setColor(0,0,0,255)
love.graphics.setBackgroundColor(255,255,255)
end
love.load
は、ゲームが開始されたときに、一度だけ呼ばれます。通常はこの関数でリソースをロードしたり、変数を初期化したり、特定の設定を行います。これらの作業は他の場所に書いても同様に実行されますが、love.load
に書けば、その作業が一度だけ行われることを意味するので、多くのシステムリソースを節約することができます。
love.update
function love.update(dt)
if love.keyboard.isDown("up") then
num = num + 100 * dt -- 1秒あたり100ずつnumをインクリメントする
end
end
love.update
は、ゲーム中ずっと呼び出されつづけます。ゲームのための計算のほとんどはこの関数で行われるでしょう。'dt'はデルタ・タイムの略で、love.update
が最後に前回呼び出された時間からの経過秒数を表しています。(通常、デルタ・タイムは0.025714のような小さな値です)
love.draw
function love.draw()
love.graphics.draw(image, imgx, imgy)
love.graphics.print("Click and drag the cake around or use the arrow keys", 10, 10)
end
love.draw
は(名前から既に十分明々白々でしょうが)すべての描画(ドロー)を行う関数です。love.graphics.draw
などの描画を行う関数はすべてlove.draw
の中から呼び出す必要があり、love.draw
以外から呼び出しても何も描画されません。この関数もlove.update
と同様ゲーム中ずっと呼び出されつづけるので、関数の末尾でfont・color・modeなどを変更した場合、それは関数の先頭に影響を与えることに留意してください。次のコードはその一例です。
function love.load()
love.graphics.setColor(0,0,0) -- テキストの色を黒に変えます
end
function love.draw()
love.graphics.print("This text is not black because of the line below", 100, 100) -- 下の行の影響で、このテキストは黒ではなく赤くなります
love.graphics.setColor(255,0,0) -- テキストの色を赤に変えます
love.graphics.print("This text is red", 100, 200) -- このテキストは(もちろん)赤くなります
end
love.mousepressed
function love.mousepressed(x, y, button)
if button == 'l' then
imgx = x -- クリックされた位置にイメージを動かす
imgy = y
end
end
love.mousepressed
はマウスボタンが押されたときに呼び出され、マウスカーソルの位置と押されたボタンが関数に受け渡されます。button
変数の値はマウスボタン定数の中のいずれかです。This function goes very well along with love.mousereleased
.
love.mousereleased
function love.mousereleased(x, y, button)
if button == 'l' then
fireSlingshot(x,y) -- this totally awesome custom function is defined elsewhere
end
end
love.mousereleased
はマウスボタンが離されたときに呼び出され、マウスカーソルの位置と離されたボタンが関数に受け渡されます。You can have this function together with love.mousepressed
or separate, they aren't connected in any way.
love.keypressed
function love.keypressed(key, unicode)
if key == 'b' then
text = "The B key was pressed."
elseif key == 'a' then
a_down = true
end
end
love.keypressed
はキーボードのキーが押されたときに呼び出され、押されたキーが関数に受け渡されます。key
変数の値はキー定数の中のいずれかです。This functions goes very well along with love.keyreleased
.
love.keyreleased
function love.keyreleased(key, unicode)
if key == 'b' then
text = "The B key was released."
elseif key == 'a' then
a_down = false
end
end
love.keyreleased
はキーボードのキーが離されたときに呼び出され、離されたキーが関数に受け渡されます。You can have this function together with love.keypressed
or separate, they aren't connected in any way.
love.focus
function love.focus(f)
if not f then
print("LOST FOCUS")
else
print("GAINED FOCUS")
end
end
love.focus
はLÖVEのウィンドウの外や中がクリックされて、フォーカスが移動したときに呼び出されます。例えば、ゲームをプレイ中にプレイヤーがインターネットブラウザーをクリックしたときにはこの関数が呼び出されるので、ゲームを自動的にポーズすることができます。
function love.focus(f) gameIsPaused = not f end
function love.update(dt)
if gameIsPaused then return end
-- 以下に自分で残りのコードを書く
end
love.quit
function love.quit()
print("Thanks for playing! Come back soon!")
end
love.quit
はウィンドウのクローズボタン(大抵×印が付いているボタン)がクリックされたときに呼び出されます。たとえば、プレイヤーがゲームをやめようとしてクローズボタンを押すと、ウィンドウが閉じる前にこの関数が呼び出されるので、ゲームの状態をセーブしておくことができます。
以上がコールバック関数とその基本的な使い方です。
Other languages
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info