山水堂
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.update内で
を使ってみました。
必要に応じていろいろと変更して遊んでみてください!
[2016.08.19] 新規:0.10.1で動作確認