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

(Wrote Callback-Functions tutorial in japanese.)
 
(日本語訳の追加と修正)
Line 1: Line 1:
愛の[[:Category:Callbacks|コールバック(カテゴリは英語です)]]関数は次式で[[love.run]]様々なタスクを実行し、すべてオプションですします。と呼ばれていしかし、フル機能のゲームの経験は、おそらくほとんどすべての利用するでしょうので、それが何であるかを知るのが賢明です。
+
LÖVEの[[:Category:Callbacks|コールバック関数]]は、[[love.run]]から様々なタスクを実行するために呼ばれる、オプショナルな関数です。しかし、フル機能のゲーム体験のために、おそらくほとんどすべてのコールバック関数を利用するので、それが何であるかを知っておくのが賢明でしょう。
  
コールバックは、プログラミングに新規または長期でそうでなければなじみのない人のため、ある意味で逆方向に動作する関数です。のような通常の関数の中で[[love.graphics.draw]]または数学。床には、あなたが、愛やLuaが何かを呼び出します。コールバックは、他の一方で、関数であり、特定の時間帯では、コードと愛呼び出します。これは、簡単にあなたのコードが組織的かつ最適に保つようになります。ゲームは最初の(他のコールバックの前)に開始されたとき「love.load」は一度だけ呼び出されますので、例えば、それはゲームコンテンツをロードするコードを置くのに良い場所だと、それ以外のものを準備します。
+
プログラミング初心者や、コールバックをご存じない方の為にに申し上げれば、コールバックは、ある意味で逆方向に動作する関数です。一般的な関数、たとえば[[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 -- これは、毎秒100で「num」をインクリメントしたい
+
       num = num + 100 * dt -- 1秒あたり100ずつnumをインクリメントする
 
   end
 
   end
 
end
 
end
 
</source>
 
</source>
この関数は、連続して呼び出され、あなたの数学のほとんどが行われている場所はおそらくなります。'dt'[[love.timer.getDelta|デルタ時間]]の略で、この関数は(通常は0.025714のような小さな値である)と呼ばれた最後の時間からの経過秒量です。
+
<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>[[love.draw]]</code>すべての描画が発生するところです(これは既に十分に明らかにされなかった場合)とを呼び出す場合は、<code>[[love.graphics.draw]]</code>と、この関数の外でそれが起こっていないのいずれかが持っている任意の効果。この関数は、連続しているので、関数の末尾に「font/color/mode/etc」変更した場合、それは関数の先頭で物事に影響を与えることに留意してくださいと呼ばれています。たとえば、次のように
+
<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というコールバック関数は、ゲームが開始された直後、他のコールバック関数が呼び出される前に一度だけ呼び出されるので、ゲームコンテンツをロードしたり、何かの準備をするコードを書くのにちょうどいい関数です。

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