Difference between revisions of "Tutorial:Callback Functions (日本語)"

m (Update for new syntax)
Line 1: Line 1:
LÖVEの[[:Category:Callbacks|コールバック関数]]は、[[love.run]]から様々なタスクを実行するために呼ばれる、オプショナルな関数です。しかし、フル機能のゲーム体験のために、おそらくほとんどすべてのコールバック関数を利用するので、それが何であるかを知っておくのが賢明でしょう。
+
LÖVE において[[:Category:Callbacks (日本語)|コールバック]]関数は全て選択制であり様々な作業を実行するために [[love.run (日本語)|love.run]] から呼び出されます。しかしながら、完全な機能のあるゲーム体験では恐らくほぼ全てを利用するため、したがってそれらがなにかを熟知するのは賢明です。
  
プログラミング初心者や、コールバックをご存じない方の為に申し上げれば、コールバックは、ある意味で逆方向に動作する関数です。一般的な関数、たとえば[[love.graphics.draw]]やmath.floorといった関数は、プログラムの中であなたが関数を呼び出すと、LÖVEやLuaが何か作業を行います。一方、コールバックは自分で中身を書く関数で、ある決められた場面で、LÖVEがその関数を呼び出します。これによって簡単に、あなたのコードを整理された最適な状態に保っておくことができるようになります。一例を挙げれば、love.loadというコールバック関数は、ゲームが開始された直後、他のコールバック関数が呼び出される前に一度だけ呼び出されるので、ゲームコンテンツをロードしたり、何かの準備をするコードを書くのにちょうどいい関数です。
+
コールバックは、プログラミング未経験または用語に見覚えがない方々への説明としては、ある意味で逆方向に動作する関数です。 [[love.graphics.draw (日本語)|love.graphics.draw]] または math.floor といった一般的な関数では、それをあなたが呼び出すと LÖVE または Lua が何かを処理します。コールバックは、他方では、あなたがコード化する関数であり特定の場合に LÖVE が呼び出します。これはあたのコードを組織化および最適化の維持を容易にします。例えば、 love.load はゲームが最初に開始された時に一度だけ呼び出されるため (他の全てのコールバックの前に)、ゲーム・コンテンツの読み込みおよびその他何らかの準備を行うコードを置くには適している場所です。
  
==[[love.load]]==
+
== [[love.load (日本語)|love.load]] ==
 
<source lang="lua">
 
<source lang="lua">
 
function love.load()
 
function love.load()
 
   image = love.graphics.newImage("cake.jpg")
 
   image = love.graphics.newImage("cake.jpg")
   local f = love.graphics.newFont(12)
+
   love.graphics.setNewFont(12)
  love.graphics.setFont(f)
+
   love.graphics.setColor(0,0,0)
   love.graphics.setColor(0,0,0,255)
 
 
   love.graphics.setBackgroundColor(255,255,255)
 
   love.graphics.setBackgroundColor(255,255,255)
 
end
 
end
 
</source>
 
</source>
<code>love.load</code>は、ゲームが開始されたときに、一度だけ呼ばれます。通常はこの関数でリソースをロードしたり、変数を初期化したり、特定の設定を行います。これらの作業は他の場所に書いても同様に実行されますが、<code>love.load</code>に書けば、その作業が一度だけ行われることを意味するので、多くのシステムリソースを節約することができます。
+
ゲームが開始された時に、この関数は一度だけ呼び出されるため、通常はリソースの読み込み、変数の初期化および特定の設定を設定する場所です。それら全てはその他のどの様な場所でも同様に行うことはできますが、ここで行うことでそれらが一度だけ行われること意味するため、多くのシステム・リソースの節約になります。
  
==[[love.update]]==
+
== [[love.update (日本語)|love.update]] ==
 
<source lang="lua">
 
<source lang="lua">
 
function love.update(dt)
 
function love.update(dt)
 
   if love.keyboard.isDown("up") then
 
   if love.keyboard.isDown("up") then
       num = num + 100 * dt -- 1秒あたり100ずつnumをインクリメントする
+
       num = num + 100 * dt -- これは num を 1 秒ごとに 100 加算します。
 
   end
 
   end
 
end
 
end
 
</source>
 
</source>
<code>love.update</code>は、ゲーム中ずっと呼び出されつづけます。ゲームのための計算のほとんどはこの関数で行われるでしょう。'dt'は[[love.timer.getDelta|デルタ・タイム]]の略で、<code>love.update</code>が前回呼び出された時間からの経過秒数を表しています。(通常、デルタ・タイムは0.025714のような小さな値です)
+
この関数は継続的に呼び出され恐らくほとんどのあなたの計算を済ませる場所になります。 'dt' は"[[love.timer.getDelta (日本語)|デルタ・タイム]]の意味でありこの関数が以前に呼び出された時からの経過時間を秒数にて表しています (通常は 0.025714 のような小さな値です)。
  
==[[love.draw]]==
+
== [[love.draw (日本語)|love.draw]] ==
 
<source lang="lua">
 
<source lang="lua">
 
function love.draw()
 
function love.draw()
Line 32: Line 31:
 
end
 
end
 
</source>
 
</source>
<code>love.draw</code>は(名前から既に十分明々白々でしょうが)すべての描画(ドロー)を行う関数です。<code>[[love.graphics.draw]]</code>などの描画を行う関数はすべて<code>love.draw</code>の中から呼び出す必要があり、<code>love.draw</code>以外から呼び出しても何も描画されません。この関数も<code>love.update</code>と同様ゲーム中ずっと呼び出されつづけるので、関数の末尾でfont・color・modeなどを変更した場合、それは関数の先頭に影響を与えることに留意してください。次のコードはその一例です。
+
<code>[[love.draw (日本語)|love.draw]]</code> は描画の全てが起こる場所であり(まだ十分にそれが明白ではないならば)この関数の外部で任意の <code>[[love.graphics.draw (日本語)|love.graphics.draw]]</code> のうちどれかを呼び出した場合でもそれらの効果は一切ありません。この関数に関しても継続的に呼び出されるため関数の終わりでフォント・配色・モード(方式)・などを変更する場合に関数の始まりのものに影響することに留意してください。例えば:
 +
 
<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]]==
+
== [[love.mousepressed (日本語)|love.mousepressed]] ==
{{newin|[[0.10.0]]|100|type=variant}}
+
{{newin (日本語)|[[0.10.0]]|100|type=異形}}
 
<source lang="lua">
 
<source lang="lua">
 
function love.mousepressed(x, y, button, istouch)
 
function love.mousepressed(x, y, button, istouch)
 
   if button == 1 then
 
   if button == 1 then
       imgx = x -- クリックされた位置にイメージを動かす
+
       imgx = x -- クリックされた場所へ画像を移動します。
 
       imgy = y
 
       imgy = y
 
   end
 
   end
 
end
 
end
 
</source>
 
</source>
 +
この関数はマウスのボタンが押されてボタンおよび押された場所の座標を受信する場合は常に呼び出されます。 button は押された任意のボタンの索引でありえます。この関数は <code>[[love.mousereleased (日本語)|love.mousereleased]]</code> との併用で非常に上手く動作します。
  
<code>love.mousepressed</code>はマウスボタンが押されたときに呼び出され、マウスカーソルの位置と押されたボタンが関数に受け渡されます。<code>button</code>変数の値は[[MouseConstant|マウスボタン定数]]の中のいずれかです。This function goes very well along with <code>love.mousereleased</code>.
+
== [[love.mousereleased (日本語)|love.mousereleased]] ==
 
+
{{newin (日本語)|[[0.10.0]]|100|type=異形}}
==[[love.mousereleased]]==
 
{{newin|[[0.10.0]]|100|type=variant}}
 
 
<source lang="lua">
 
<source lang="lua">
 
function love.mousereleased(x, y, button, istouch)
 
function love.mousereleased(x, y, button, istouch)
 
   if button == 1 then
 
   if button == 1 then
       fireSlingshot(x,y) -- this totally awesome custom function is defined elsewhere
+
       fireSlingshot(x,y) -- この全くもって素晴らしいカスタム関数は他の所へ定義されます。
 
   end
 
   end
 
end
 
end
 
</source>
 
</source>
 +
この関数はマウスのボタンが離されてボタンおよび離された場所の座標を受信する場合は常に呼び出されます。この関数は <code>[[love.mousepressed (日本語)|love.mousepressed]]</code> と併用または独立して扱うこともできますが、それはいかなるの方法であっても接続されません。
  
<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 (日本語)|love.keypressed]]==
 
 
 
 
==[[love.keypressed]]==
 
 
<source lang="lua">
 
<source lang="lua">
function love.keypressed(key, unicode)
+
function love.keypressed(key)
 
   if key == 'b' then
 
   if key == 'b' then
 
       text = "The B key was pressed."
 
       text = "The B key was pressed."
Line 81: Line 78:
 
end
 
end
 
</source>
 
</source>
 +
この関数はキーボードのキーが押されて押されたキーを受信する場合は常に呼び出されます。key は [[KeyConstant (日本語)|定数]] のいずれかでありえます。この関数は <code>[[love.keyreleased (日本語)|love.keyreleased]]</code> との併用で非常に上手く動作します。
  
<code>love.keypressed</code>はキーボードのキーが押されたときに呼び出され、押されたキーが関数に受け渡されます。<code>key</code>変数の値は[[MouseConstant|キー定数]]の中のいずれかです。This functions goes very well along with <code>love.keyreleased</code>.
+
== [[love.keyreleased (日本語)|love.keyreleased]] ==
 
 
==[[love.keyreleased]]==
 
 
<source lang="lua">
 
<source lang="lua">
function love.keyreleased(key, unicode)
+
function love.keyreleased(key)
 
   if key == 'b' then
 
   if key == 'b' then
 
       text = "The B key was released."
 
       text = "The B key was released."
Line 94: Line 90:
 
end
 
end
 
</source>
 
</source>
 +
この関数はキーボードのキーが離されて離されたキーを受信する場合は常に呼び出されます。この関数は <code>[[love.keypressed (日本語)|love.keypressed]]</code> との併用または独立して扱うこともできますが、それはいかなるの方法であっても接続されません。
  
<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 (日本語)|love.focus]] ==
 
 
==[[love.focus]]==
 
 
<source lang="lua">
 
<source lang="lua">
 
function love.focus(f)
 
function love.focus(f)
Line 107: Line 102:
 
end
 
end
 
</source>
 
</source>
 
+
この関数は利用者が LÖVE のウィンドウおよびその外をクリックしたときに呼び出されます。例えば、ウィンドウ表示のゲームで遊んでいるときに、利用者がインターネット・ブラウザーをクリックした場合に、それがゲームへ通知されゲームは自動的に一時停止することができます。
<code>love.focus</code>はLÖVEのウィンドウの外や中がクリックされて、フォーカスが移動したときに呼び出されます。例えば、ゲームをプレイ中にプレイヤーがインターネットブラウザーをクリックしたときにはこの関数が呼び出されるので、ゲームを自動的にポーズすることができます。
 
 
 
 
<source lang="lua">
 
<source lang="lua">
 
function love.focus(f) gameIsPaused = not f end
 
function love.focus(f) gameIsPaused = not f end
  
 
function love.update(dt)
 
function love.update(dt)
    if gameIsPaused then return end
+
if gameIsPaused then return end
    -- 以下に自分で残りのコードを書く
+
 
 +
-- ここへあなたの love.update のコードを記載してください。
 
end
 
end
 
</source>
 
</source>
  
==[[love.quit]]==
+
== [[love.quit (日本語)|love.quit]] ==
 
<source lang="lua">
 
<source lang="lua">
 
function love.quit()
 
function love.quit()
Line 125: Line 119:
 
end
 
end
 
</source>
 
</source>
 +
この関数はウィンドウの閉じるボタン(大抵は×)が利用者によりクリックされたときに呼び出されます。例えば、遊技者がゲームを終了したいと決めたとき、閉じるボタンをクリックできます。その後、閉じる前に、そのゲームの状態を保存することができます。
  
<code>love.quit</code>はウィンドウのクローズボタン(大抵×印が付いているボタン)がクリックされたときに呼び出されます。たとえば、プレイヤーがゲームをやめようとしてクローズボタンを押すと、ウィンドウが閉じる前にこの関数が呼び出されるので、ゲームの状態をセーブしておくことができます。
+
それらはコールバック関数およびそれらの基本的な使用方法です。
 
 
以上がコールバック関数とその基本的な使い方です。
 
 
 
 
[[Category:Tutorials (日本語)]]
 
[[Category:Tutorials (日本語)]]
 
 
{{#set:LOVE Version=0.6.0}}
 
{{#set:LOVE Version=0.6.0}}
{{#set:Description=Callback Functions}}
+
{{#set:Description=コールバック関数。}}
 
+
== そのほかの言語 ==
== Other languages ==
 
 
{{i18n|Tutorial:Callback Functions}}
 
{{i18n|Tutorial:Callback Functions}}

Revision as of 06:24, 26 August 2016

LÖVE においてコールバック関数は全て選択制であり様々な作業を実行するために love.run から呼び出されます。しかしながら、完全な機能のあるゲーム体験では恐らくほぼ全てを利用するため、したがってそれらがなにかを熟知するのは賢明です。

コールバックは、プログラミング未経験または用語に見覚えがない方々への説明としては、ある意味で逆方向に動作する関数です。 love.graphics.draw または math.floor といった一般的な関数では、それをあなたが呼び出すと LÖVE または Lua が何かを処理します。コールバックは、他方では、あなたがコード化する関数であり特定の場合に LÖVE が呼び出します。これはあたのコードを組織化および最適化の維持を容易にします。例えば、 love.load はゲームが最初に開始された時に一度だけ呼び出されるため (他の全てのコールバックの前に)、ゲーム・コンテンツの読み込みおよびその他何らかの準備を行うコードを置くには適している場所です。

love.load

function love.load()
   image = love.graphics.newImage("cake.jpg")
   love.graphics.setNewFont(12)
   love.graphics.setColor(0,0,0)
   love.graphics.setBackgroundColor(255,255,255)
end

ゲームが開始された時に、この関数は一度だけ呼び出されるため、通常はリソースの読み込み、変数の初期化および特定の設定を設定する場所です。それら全てはその他のどの様な場所でも同様に行うことはできますが、ここで行うことでそれらが一度だけ行われること意味するため、多くのシステム・リソースの節約になります。

love.update

function love.update(dt)
   if love.keyboard.isDown("up") then
      num = num + 100 * dt -- これは num を 1 秒ごとに 100 加算します。
   end
end

この関数は継続的に呼び出され恐らくほとんどのあなたの計算を済ませる場所になります。 'dt' は"デルタ・タイムの意味でありこの関数が以前に呼び出された時からの経過時間を秒数にて表しています (通常は 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 のうちどれかを呼び出した場合でもそれらの効果は一切ありません。この関数に関しても継続的に呼び出されるため関数の終わりでフォント・配色・モード(方式)・などを変更する場合に関数の始まりのものに影響することに留意してください。例えば:

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

LÖVE 0.10.0 から使用可能
この異形は以前のバージョンでは非対応です。
function love.mousepressed(x, y, button, istouch)
   if button == 1 then
      imgx = x -- クリックされた場所へ画像を移動します。
      imgy = y
   end
end

この関数はマウスのボタンが押されてボタンおよび押された場所の座標を受信する場合は常に呼び出されます。 button は押された任意のボタンの索引でありえます。この関数は love.mousereleased との併用で非常に上手く動作します。

love.mousereleased

LÖVE 0.10.0 から使用可能
この異形は以前のバージョンでは非対応です。
function love.mousereleased(x, y, button, istouch)
   if button == 1 then
      fireSlingshot(x,y) -- この全くもって素晴らしいカスタム関数は他の所へ定義されます。
   end
end

この関数はマウスのボタンが離されてボタンおよび離された場所の座標を受信する場合は常に呼び出されます。この関数は love.mousepressed と併用または独立して扱うこともできますが、それはいかなるの方法であっても接続されません。

love.keypressed

function love.keypressed(key)
   if key == 'b' then
      text = "The B key was pressed."
   elseif key == 'a' then
      a_down = true
   end
end

この関数はキーボードのキーが押されて押されたキーを受信する場合は常に呼び出されます。key は 定数 のいずれかでありえます。この関数は love.keyreleased との併用で非常に上手く動作します。

love.keyreleased

function love.keyreleased(key)
   if key == 'b' then
      text = "The B key was released."
   elseif key == 'a' then
      a_down = false
   end
end

この関数はキーボードのキーが離されて離されたキーを受信する場合は常に呼び出されます。この関数は love.keypressed との併用または独立して扱うこともできますが、それはいかなるの方法であっても接続されません。

love.focus

function love.focus(f)
  if not f then
    print("LOST FOCUS")
  else
    print("GAINED FOCUS")
  end
end

この関数は利用者が LÖVE のウィンドウおよびその外をクリックしたときに呼び出されます。例えば、ウィンドウ表示のゲームで遊んでいるときに、利用者がインターネット・ブラウザーをクリックした場合に、それがゲームへ通知されゲームは自動的に一時停止することができます。

function love.focus(f) gameIsPaused = not f end

function love.update(dt)
	if gameIsPaused then return end

	-- ここへあなたの love.update のコードを記載してください。
end

love.quit

function love.quit()
  print("Thanks for playing! Come back soon!")
end

この関数はウィンドウの閉じるボタン(大抵は×)が利用者によりクリックされたときに呼び出されます。例えば、遊技者がゲームを終了したいと決めたとき、閉じるボタンをクリックできます。その後、閉じる前に、そのゲームの状態を保存することができます。

それらはコールバック関数およびそれらの基本的な使用方法です。


そのほかの言語