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で、カーソルが押しっぱなしだったら、プレイヤーの位置を動かしています。

 

ソースをざっと眺めても、それほど難しくないと思ったら、あなたは、もう立派なプログラマーです、お疲れさまでした!