山水堂
A005.キー入力の基本、その1
さっそく、コールバックを駆使して、いろいろと作ってみましょう。
せっかくなので、
DXライブラリのサンプルプログラム
http://dxlib.o.oo7.jp/dxprogram.html
を参考に、LOVEで再現していきます。
まずは、キー入力の基本です。
http://dxlib.o.oo7.jp/dxprogram.html#N1
キー入力の基本的なプログラムです。
キャラクターのグラフィックをキー入力で上下左右に移動できるというものです。
デスクトップに作ったHelloWorldをそのまま利用してもいいですし、また新しいフォルダを作ってもかまいません。
ただし、必ず「main.lua」に記述してください!
ソースは以下の通りです。
-- main.lua local player_x, player_y local player_graph -- キー状態を保持 local keystate = { up = false, down = false, right = false, left = false, } function love.load() -- ■初期読み込み! -- グラフィックのロード player_graph = love.graphics.newImage("Player.bmp") -- キャラクターの初期位置をセット player_x = 0 player_y = 0 end function love.keypressed(key, isrepeat) -- ■キーが押された! -- 押しっぱなしの状態にする if key == "up" then keystate.up = true end if key == "down" then keystate.down = true end if key == "right" then keystate.right = true end if key == "left" then keystate.left = true end -- エスケープボタンが押されたら終了イベントを起こす if key == "escape" then love.event.quit() end end function love.keyreleased(key) -- ■キーが離された! -- 押しっぱなしを解除する if key == "up" then keystate.up = false end if key == "down" then keystate.down = false end if key == "right" then keystate.right = false end if key == "left" then keystate.left = false end end function love.update(dt) -- ■更新処理! -- 押しっぱなしならプレイヤーの位置を動かす! -- ウィンドウの左上が(0,0) if keystate.up then player_y = player_y - 3 end if keystate.down then player_y = player_y + 3 end if keystate.right then player_x = player_x + 3 end if keystate.left then player_x = player_x - 3 end end function love.draw() -- ■描画処理! love.graphics.draw(player_graph, player_x, player_y) end
このように記述して、実行してみましょう。
ブルー画面に
Could not open file Player.bmp
という表記が出たら、Player.bmpという画像が見つからないということです。
http://dxlib.o.oo7.jp/dxprogram.html#N1
ここから、キャラクター画像ファイルのPlayer.bmpをダウンロードするか、自分でなんか適当に書いた画像ファイルを用意して、main.luaと同じフォルダ内に「Player.bmp」をコピーしてください。
そうしたら、再び実行してみてください。
エラーが出なく、黒い画面に、画像が浮かんでいたら成功です!
画像が、キーボードのカーソルキーで動くことを確認してみてください。
飽きたところで、エスケープボタンを押せば閉じます!
ソースの方は、コメントで書いている内容の処理を見ていただければ何となくわかると思います。
love.keypressedとlove.keyreleasedのkeystateがちょっと癖がありますね。
キーボード押しっぱなしの情報を手に入れるための処理です。
love.keypressedは、押した瞬間のキーが来て、love.keyreleasedは、離した瞬間のキーが来ます。
押されたときにON、離されたときにOFFとしておけば、めでたく押しっぱなしがわかるわけです。
love.updateで、カーソルが押しっぱなしだったら、プレイヤーの位置を動かしています。
ソースをざっと眺めても、それほど難しくないと思ったら、あなたは、もう立派なプログラマーです、お疲れさまでした!