0Pricing
Lua Academy · レッスン

入力を扱う

キーとマウスに反応します。

「入力を扱う」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

入力を読み取る2つの方法

LÖVE には2種類の入力方法があります。ポーリングは各フレームで「今このキーが押されているか」を確認する方法で、移動のような継続的な操作に適しています。

イベントは何かが起きたときに一度だけ呼び出されるコールバックです。love.keypressed などがあり、ジャンプや射撃のような一度だけ実行する操作に適しています。

キーボードのポーリング

love.keyboard.isDown(key) は、キーが押されている間は true を返します。滑らかで継続的な反応を得るため、love.update 内で呼び出します。

毎フレーム確認されるため、キーを押し続けると操作も続きます。プレイヤーを移動させる場合に自然な方法です。

function love.update(dt)
  if love.keyboard.isDown('right') then
    player.x = player.x + player.speed * dt
  end
end

複数のキーの確認

love.keyboard.isDown は一度に複数のキーを受け取り、いずれかが押されていれば true を返します。別のキー割り当てを用意する場合に便利です。

また、個別の方向をそれぞれ処理するために、確認処理を別々に連結することもできます。これにより、4方向すべての移動に対応できます。

function love.update(dt)
  if love.keyboard.isDown('a', 'left') then
    player.x = player.x - player.speed * dt
  end
  if love.keyboard.isDown('d', 'right') then
    player.x = player.x + player.speed * dt
  end
end

keypressed イベント

love.keypressed(key) は、キーが押された瞬間に正確に一度だけ呼び出されます。ジャンプや一時停止など、キーを押し続けても繰り返したくない操作に使います。

エンジンはキー名を文字列として渡すため、'space' や 'escape' のような名前と比較します。

function love.keypressed(key)
  if key == 'space' then
    player.jumping = true
  end
end

Escape で終了する

プレイヤーが Escape を押したときにゲームを終了するのは、よく使われるパターンです。love.event.quit でエンジンを適切に終了できます。

keypressed は押すたびに一度だけ呼び出されるため、キーを押し続けたときに誤って何度も実行されるのを防げます。

function love.keypressed(key)
  if key == 'escape' then
    love.event.quit()
  end
end

keyreleased

love.keyreleased(key) は、キーを離したときに一度だけ呼び出されます。keypressed と組み合わせると、キーが押されている状態を自分で追跡できます。

これはチャージの仕組みに便利です。押したときにチャージを開始し、離したときに発射することで、キーを押していた時間を測定できます。

function love.keypressed(key)
  if key == 'space' then chargeStart = love.timer.getTime() end
end
function love.keyreleased(key)
  if key == 'space' then power = love.timer.getTime() - chargeStart end
end

マウスの位置

love.mouse.getPosition は、love.update または love.draw 内で、カーソルの現在の x 座標と y 座標を返します。getX と getY を個別に使うこともできます。

座標は描画空間と同じで、原点は左上、下方向に進むほど y が大きくなります。

function love.update(dt)
  local mx, my = love.mouse.getPosition()
  crosshair.x, crosshair.y = mx, my
end

マウスボタン

love.mouse.isDown(1) でボタンをポーリングします。1 は左ボタン、2 は右ボタン、3 は中央ボタンを表します。

1回のクリックを処理するには、イベント love.mousepressed(x, y, button) を使います。このイベントは一度だけ呼び出され、クリックされた座標も直接渡されます。

function love.mousepressed(x, y, button)
  if button == 1 then
    spawnAt(x, y)
  end
end

テキスト入力

文字入力では、love.textinput(text) がレイアウトや修飾キーを考慮した実際の文字を渡します。テキストフィールドを作る場合は、keypressed よりもこちらが適しています。

textinput が送信しない Backspace や Enter などの特殊キーを処理するには、keypressed も併用します。

function love.textinput(t)
  inputBuffer = inputBuffer .. t
end

ポーリングとイベントの組み合わせ

実際のゲームでは、2つの方法を組み合わせます。love.update で移動キーを毎フレームポーリングし、一度だけ実行する操作はイベントコールバックで処理します。

適切な方法を選ぶことでバグを防げます。update でジャンプをポーリングすると、キーを押している間は毎フレーム実行されますが、イベントなら意図どおり一度だけ実行されます。

function love.update(dt)
  if love.keyboard.isDown('left') then player.x = player.x - 200*dt end
end
function love.keypressed(key)
  if key == 'up' then jump() end
end

ゲームパッドの基本

LÖVE は joystick API を通じてコントローラーにも対応しています。love.joystickpressed と、ジョイスティックの isGamepadDown でボタン入力を読み取れます。

アナログスティックは getGamepadAxis を通じて -1 から 1 の値を返すため、キーボードのポーリングと同じように dt を使って移動を滑らかに調整できます。

function love.update(dt)
  if joystick then
    local ax = joystick:getGamepadAxis('leftx')
    player.x = player.x + ax * player.speed * dt
  end
end

理解度チェック

LÖVE の入力処理についての理解度を確認しましょう。

まとめ

LÖVE の入力には2種類あります。継続的な操作には love.keyboard.isDown や love.mouse.isDown でポーリングし、一度だけ実行する操作には love.keypressed や love.mousepressed のようなイベントコールバックに反応します。

マウス、テキスト、ゲームパッドの API がこれを補います。適切な方法を選ぶことで、操作の応答性を保ち、バグを防げます。

よくある質問

「入力を扱う」レッスンは無料ですか?

はい。「入力を扱う」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「入力を扱う」で何を学びますか?

キーとマウスに反応します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「入力を扱う」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. LOVEのゲームループ
  2. 図形と画像を描画する
  3. 入力を扱う
  4. 移動と衝突
← Lua Academyに戻る