A016.残像処理基本

残像処理の基本的なプログラムです。

http://dxlib.o.oo7.jp/dxprogram.html#N16

DXライブラリを参考にしました!

 

-- conf.lua

function love.conf(t)
	t.window.width = 640
	t.window.height = 480
end

640x480で設計していますので、コンフィグファイルを設定しておきましょう。

例のごとくソースをはります。

 

-- main.lua

local	AFTIMAGENUM = 65

local	player_pos = {}

function love.load()
	-- 初期化
	for i = 1, AFTIMAGENUM do
		player_pos[i] = player_pos[i] or {}
		player_pos[i].x = 0
		player_pos[i].y = 0
	end
end

function love.update(dt)
	
	-- 移動距離(1フレームごとに3ピクセル)
	local	move = 3 * dt * 60
	
	-- 上を押していたら上に進む
	if love.keyboard.isDown("up", "k", "kp8") then
		player_pos[1].y = player_pos[1].y - move
	end
	-- 下を押していたら下に進む
	if love.keyboard.isDown("down", "j", "kp2") then
		player_pos[1].y = player_pos[1].y + move
	end
	-- 右を押していたら右に進む
	if love.keyboard.isDown("right", "l", "kp6") then
		player_pos[1].x = player_pos[1].x + move
	end
	-- 左を押していたら左に進む
	if love.keyboard.isDown("left", "h", "kp4") then
		player_pos[1].x = player_pos[1].x - move
	end
	
	-- 残像を一つずつずらす
	for i = AFTIMAGENUM, 2, -1 do
		player_pos[i].x = player_pos[i - 1].x
		player_pos[i].y = player_pos[i - 1].y
	end
end

function draw_box(
	-- DXライブラリ風
	left,
	top,
	right,
	bottom,
	color,
	fill_flag
	)
	-- なければ、初期セット
	color = color or {}
	fill_flag = fill_flag or true
	
	-- fillを生成
	local	fill = "line"
	if fill_flag then fill = "fill" end
	
	-- 色をセット
	local	get_color = { love.graphics.getColor() }
	love.graphics.setColor(color[1] or 0, color[2] or 0, color[3] or 0, color[4] or 255)
	
	-- 描画!
	love.graphics.polygon(
		fill,
		left,
		top,
		right,
		top,
		right,
		bottom,
		left,
		bottom
	)
	
	-- 色を復帰
	love.graphics.setColor(unpack(get_color))
end

function love.draw()
	
	-- 残像から描画
	for i = AFTIMAGENUM, 1, -8 do
		draw_box(player_pos[i].x, player_pos[i].y,
			player_pos[i].x + 32, player_pos[i].y + 32,
			{0, 255 - 255 * i / AFTIMAGENUM, 0}, true)
	end
end

 

これを実行してみると緑のプレイヤーが移動するサンプルが始まります!

カーソルキーかvim風キーか、テンキー2468でプレイヤーが移動。

 

今回は

love.keypressed

love.keyreleased

といったコールバック関数の代わりにlove.update内で

love.keyboard.isDown

を使ってみました。

 

必要に応じていろいろと変更して遊んでみてください!


[2016.08.19] 新規:0.10.1で動作確認