入力を扱う
キーとマウスに反応します。
「入力を扱う」は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
endkeypressed イベント
love.keypressed(key) は、キーが押された瞬間に正確に一度だけ呼び出されます。ジャンプや一時停止など、キーを押し続けても繰り返したくない操作に使います。
エンジンはキー名を文字列として渡すため、'space' や 'escape' のような名前と比較します。
function love.keypressed(key)
if key == 'space' then
player.jumping = true
end
endEscape で終了する
プレイヤーが Escape を押したときにゲームを終了するのは、よく使われるパターンです。love.event.quit でエンジンを適切に終了できます。
keypressed は押すたびに一度だけ呼び出されるため、キーを押し続けたときに誤って何度も実行されるのを防げます。
function love.keypressed(key)
if key == 'escape' then
love.event.quit()
end
endkeyreleased
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フィードバックを取得できます。ローカル設定は不要です。