Views
Tutorial:Callback Functions (日本語)
LÖVEのコールバック関数は、love.runから様々なタスクを実行するために呼ばれる、オプショナルな関数です。しかし、フル機能のゲーム体験のために、おそらくほとんどすべてのコールバック関数を利用するので、それが何であるかを知っておくのが賢明でしょう。
プログラミング初心者や、コールバックをご存じない方の為に申し上げれば、コールバックは、ある意味で逆方向に動作する関数です。一般的な関数、たとえばlove.graphics.drawやmath.floorといった関数は、プログラムの中であなたが関数を呼び出すと、LÖVEやLuaが何か作業を行います。一方、コールバックは自分で中身を書く関数で、ある決められた場面で、LÖVEがその関数を呼び出します。これによって簡単に、あなたのコードを整理された最適な状態に保っておくことができるようになります。一例を挙げれば、love.loadというコールバック関数は、ゲームが開始された直後、他のコールバック関数が呼び出される前に一度だけ呼び出されるので、ゲームコンテンツをロードしたり、何かの準備をするコードを書くのにちょうどいい関数です。
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
if love.keyboard.isDown("up") then
num = num + 100 * dt -- 1秒あたり100ずつnumをインクリメントする
end
end
love.update
は、ゲーム中ずっと呼び出されつづけます。ゲームのための計算のほとんどはこの関数で行われるでしょう。'dt'はデルタ・タイムの略で、love.update
が前回呼び出された時間からの経過秒数を表しています。(通常、デルタ・タイムは0.025714のような小さな値です)
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などを変更した場合、それは関数の先頭に影響を与えることに留意してください。次のコードはその一例です。
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
if button == 'l' then
imgx = x -- クリックされた位置にイメージを動かす
imgy = y
end
end
love.mousepressed
はマウスボタンが押されたときに呼び出され、マウスカーソルの位置と押されたボタンが関数に受け渡されます。button
変数の値はマウスボタン定数の中のいずれかです。This function goes very well along with love.mousereleased
.
love.mousereleased
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
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
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
if not f then
print("LOST FOCUS")
else
print("GAINED FOCUS")
end
end
love.focus
はLÖVEのウィンドウの外や中がクリックされて、フォーカスが移動したときに呼び出されます。例えば、ゲームをプレイ中にプレイヤーがインターネットブラウザーをクリックしたときにはこの関数が呼び出されるので、ゲームを自動的にポーズすることができます。
function love.update(dt)
if gameIsPaused then return end
-- 以下に自分で残りのコードを書く
end
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