Tutorial:Using Input (日本語)

LÖVE による入力イベントの捕獲は本当に簡単です。この教本ではオブジェクト・メソッドとコールバックの両方を使用してキーボードおよびマウスのイベントを捕獲する方法を包含しています。大抵は空の LÖVE プログラムから書くことにより教本を開始します:

local text
 
function love.load()
   love.graphics.setNewFont(12)
   text = "Nothing yet"
end
 
function love.update(dt)
 
end
 
function love.draw()
   love.graphics.print( text, 330, 300 )
end

キーボード・イベントの捕獲

利用者がキーを押しているかどうかを検知する最も簡単な方法は love.keyboard.isDown メソッドを呼び出すことであり、それは下記の構文になります:

love.keyboard.isDown( key )

引数 key は文字列表現であり指定したキーが現在押されているかどうか確認します。単純な用例は:

if love.keyboard.isDown( " " ) then
   text = "The SPACE key is held down!"
end

キーの完全な一覧はこちらにあります。この確認を行う最良の場所は love.update コールバックの内側です: 利用者からの入力を取得および画面へなにかを描画する前に変数の更新を行うことができます。従って、修正後の love.update コールバックはこのような内容になります:

function love.update(dt)
   if love.keyboard.isDown( " " ) then
      text = "The SPACE key is held down!"
   end
end

どのキーまたは現在押されているキーを検知する必要がある間ならば、これは申し分なく非常に良いものであり、特定のキーが押された、および・または、離されたときに様々な動作を指定する必要がある場合があります。このための簡潔な方法は love.keypressed および love.keyreleased キーボード専用コールバックを使用することです。それは既に存じている love.update または love.draw コールバックと同様の方法で動作を行い、イベントが発生するごとに対象のコードを実行します。例えば:

function love.keypressed( key )
   if key == "return" then
      text = "RETURN has been pressed!"
   end
end
 
function love.keyreleased( key )
   if key == "return" then
      text = "RETURN has been released!"
   end
end

確認できる通り、これら二種類のコールバックは指定されたキーが押された、離されたか双方であるかどうかを確認するために使用することができる変数 key を提供します。この時点で、ソース・ファイルはこのように記述されているべきです:

function love.load()
    love.graphics.setFont(12)
    text = "Nothing yet"
end
 
function love.update(dt)
   if love.keyboard.isDown( " " ) then
      text = "The SPACE key is held down!"
   end
end
 
function love.draw()
      love.graphics.print( text, 330, 300 )
end
 
function love.keypressed( key )
   if key == "return" then
      text = "RETURN is being pressed!"
   end
end
 
function love.keyreleased( key )
   if key == "return" then
      text = "RETURN has been released!"
   end
end

マウス・イベントの捕獲

さて、キーボードにより利用者と対話する方法を既に存じています。しかし、机上に鎮座する小型齧歯類に関してはどうでしょうか? さて、マウスの入力動作は同様の方法です: love.mouse.isDown メソッドおよび love.mousepressed および love.mousereleased コールバックがあります。さあ、 love.update コールバックへ数行書き加えましょう:

if love.mouse.isDown("r") then
   text = "Right mouse button has been pressed"
end

確認できる通り、 love.keyboard.isDown と非常に似ており、さらに、こちらでマウスに関連する引数の全一覧を参照することができます。このメソッドでマウス・ホイールが上方向または下方向へ回転されたかどうかを確認することができます。ゲームのウィンドウ内にあるマウス・ポインターの現在位置を検知するための二つの手軽なメソッドがあります: love.mouse.getX および love.mouse.getY です。それぞれマウス・ポインターの現在座標を返します。さあ、 love.update コールバックの最初へ、これらの行を追加した用例を見てみましょう:

mouse_x = love.mouse.getX()
mouse_y = love.mouse.getY()

また、この行は love.update コールバックへ追加します:

love.graphics.print( "Mouse X: ".. mouse_x .. " Mouse Y: " .. mouse_y, 10, 20 )

love.mousepressed および love.mousereleased コールバックはキーボードに非常に似たメソッドであり相当品として動作します:

function love.mousepressed(x, y, button)
   if button == 'l' then
      text = "Left mouse button has been pressed"
   end
end
 
function love.mousereleased(x, y, button)
   if button == 'l' then
      text = "Left mouse button has been released"
   end
end

このコールバックにおける冷静な特徴はボタンが押されたことを検知できるだけではなく利用者がボタンが押した時にマウスポインタの位置も検知できることです。これはマウスと対話可能なボタンまたはその他のオブジェクトといったいくつかの基本的なユーザ・インタフェース要素を構築する必要がある場合は実に有用です。簡単な用例:

function love.mousepressed(x, y, button)
   if button == 'l' then
      text = "Left mouse button has been pressed at X:"..x.." Y: "..y
   end
end

最後に、さらに二つの有用なマウス関連のメソッドがあります: love.mouse.setVisible および love.mouse.isVisible です。一つめはマウス・ポインターの表示または非表示を行い、二つめはマウス・ポインターが表示されているかどうかを検出します。さあ、 love.keypressed コールバックへさらにコードを追加しましょう:

if key == 'h' then
   if love.mouse.isVisible() then
      love.mouse.setVisible(false)
   else
      love.mouse.setVisible(true)
   end
   -- または:
   -- love.mouse.setVisible(love.mouse.isVisible() ではありません)
end

これらの数行においてマウス・ポインターが表示されているかどうか確認を行い、次に表示状態を変更します: 表示されている場合は非表示に、表示されていない場合は表示します。全く簡単、ではない?


そのほかの言語