スプライト描画とput描画(putrotg)の描画速度のサンプルです。
作者さんのLuaridaコマンド説明で「ソフトで書いているので全然高速ではありません。」とのことでしたので、確認のため比較してみました。と言っても、画像を回転させてみたでけですが。
スプライトは、キャラクタを移動させるときは各スプライトに指定された位置情報だけを変更すればよく、またスプライトにタッチするとタッチされたスプライトがわかるなど動きのあるゲームでは便利な機能で、putやdraw描画とは使い分けが必要です。
------------------------------------------
-- sprite vs putrotg サンプル sprite_vs_putrotg_sample.lua
------------------------------------------
C_Black = color( 0, 0, 0)
C_White = color(255, 255, 255)
canvas.drawCls(C_White)
canvas.drawText("スプライトとputrotgの時間比較", 0, 0, 24, C_Black)
-- ワーク画面の指定範囲を回転させてメイン画面に描画する
function WorkRoteg()
local deg
canvas.drawText("putrotgでワーク画面の指定範囲を回転させる", 0, 30, 24, C_Black)
canvas.workCls()
canvas.loadBmp(system.getAppPath() .."/" .. "lua.bmp", 0, 0, 150, 150)
StartTime1 = os.time()
for deg = 0, 360, 0.4 do
canvas.putrotg( 175,175,deg,0,0,150,150)
canvas.putflush()
end
EndTime1 = os.time()
canvas.drawText("画面タッチで、spriteでワーク画面の指定範囲を回転させる。", 0, 280, 24, C_Black)
touch(3)
canvas.drawText("画面タッチで、spriteでワーク画面の指定範囲を回転させる。", 0, 280, 24, C_White, C_White)
end
-- スプライト機能でワーク画面の指定範囲を回転させてメイン画面に描画する
function spri()
sprite.init() --スプライトの初期化
canvas.drawText("spriteでワーク画面の指定範囲を回転させる ", 0, 30, 24, C_Black, C_White)
canvas.loadBmp(system.getAppPath() .."/" .. "lua.bmp", 0, 0, 150, 150)
sprite.define( 0,0, 0, 150, 150) --スプライト画像定義
StartTime2 = os.time()
for deg = 0, 360, 0.4 do
sprite.move( 0, 1, 175,175, 1, 1, deg )
sprite.put()
canvas.putflush()
end
EndTime2 = os.time()
canvas.drawText("画面タッチでspriteでワーク画面の指定範囲を回転を終了。 ", 0, 280, 24, C_Black, C_White)
touch(3)
canvas.drawText("spriteでワーク画面の指定範囲を回転させる ", 0, 30, 24, C_White, C_White)
end
function main()
WorkRoteg()
spri()
ElapsedTime1 = EndTime1 - StartTime1
canvas.drawText("putrotgでの描画 " .. ElapsedTime1 .. " sec ", 0, 100, 24, C_Black, C_White)
ElapsedTime2 = EndTime2 - StartTime2
canvas.drawText("sprite での描画 " .. ElapsedTime2 .. " sec ", 0, 150, 24, C_Black, C_White)
canvas.drawText("画面タッチで終了します。 ", 0, 280, 24, C_Black, C_White)
touch(3)
end
main()
使用した画像ファイル。画像ファイルは、「lua.bmp」です。
1.スプライト描画とput描画(putrotg)の描画速度のサンプルです。すぐにputrotgによる画像の回転が始まります。
2.画面タッチで、spriteで同じように描画します。
3.画面タッチで、それぞれの処理時間が表示されます。画面タッチで終了します。
sprite vs putrotg サンプル2
作者さんから
コメントを頂いたので、第2回戦です。(64画像を使用)
------------------------------------------
-- sprite vs putrotg サンプル2 sprite_vs_putrotg_sample2.lua
------------------------------------------
C_Black = color( 0, 0, 0)
C_White = color(255, 255, 255)
canvas.drawCls(C_White)
canvas.drawText("スプライトとputrotgの時間比較2", 0, 0, 24, C_Black)
-- ワーク画面の指定範囲を回転させてメイン画面に描画する
function WorkRoteg()
local deg
canvas.drawText("putrotgでワーク画面の指定範囲を回転させる", 0, 30, 24, C_Black)
canvas.workCls()
canvas.loadBmp(system.getAppPath() .."/" .. "lua_mini.bmp", 0, 0, 25, 25)
StartTime1 = os.time()
for deg = 0, 360, 4 do
for y = 1, 8 do
for x = 1, 8 do
canvas.putrotg( 25 * x,25 * y + 50,deg,0,0,25,25)
end
end
canvas.putflush()
end
EndTime1 = os.time()
canvas.drawText("画面タッチで、spriteでワーク画面の指定範囲を回転させる。", 0, 280, 24, C_Black)
touch(3)
canvas.drawText("画面タッチで、spriteでワーク画面の指定範囲を回転させる。", 0, 280, 24, C_White, C_White)
end
-- スプライト機能でワーク画面の指定範囲を回転させてメイン画面に描画する
function spri()
sprite.init() --スプライトの初期化
canvas.drawText("spriteでワーク画面の指定範囲を回転させる ", 0, 30, 24, C_Black, C_White)
canvas.loadBmp(system.getAppPath() .."/" .. "lua_mini.bmp", 0, 0, 25, 25)
-- スプライト画像定義
for y = 1, 8 do
for x = 1, 8 do
sprite.define( 8 * (y - 1) + x -1, 0, 0, 25, 25)
end
end
StartTime2 = os.time()
for deg = 0, 360, 4 do
for y = 1, 8 do
for x = 1, 8 do
sprite.move( 8 * (y - 1) + x -1, 2, 25 * x,25 * y + 50, 1, 1, deg )
end
end
sprite.put()
canvas.putflush()
end
EndTime2 = os.time()
canvas.drawText("画面タッチでspriteでワーク画面の指定範囲を回転を終了。 ", 0, 280, 24, C_Black, C_White)
touch(3)
canvas.drawText("spriteでワーク画面の指定範囲を回転させる ", 0, 30, 24, C_White, C_White)
end
function main()
WorkRoteg()
spri()
ElapsedTime1 = EndTime1 - StartTime1
canvas.drawText("putrotgでの描画 " .. ElapsedTime1 .. " sec ", 0, 100, 24, C_Black, C_White)
ElapsedTime2 = EndTime2 - StartTime2
canvas.drawText("sprite での描画 " .. ElapsedTime2 .. " sec ", 0, 150, 24, C_Black, C_White)
canvas.drawText("画面タッチで終了します。 ", 0, 280, 24, C_Black, C_White)
touch(3)
end
main()
使用した画像ファイル。画像ファイルは、「lua_mini.bmp」です。
1.スプライト描画とput描画(putrotg)の描画速度のサンプル2です。すぐにputrotgによる画像の回転が始まります。
2.画面タッチで、spriteで同じように描画します。
3.画面タッチで、それぞれの処理時間が表示されます。画面タッチで終了します。
スプライトのほうが早くなりました。
コメント(最大10行)
- いつも、テストと解説ありがとうございます。
spriteの場合、canvasのputに当たるところが、sprite.put()になる感じなのです。
なので、canvas.put系で10個の画像を表示するところをspriteを使うと、moveで10画像をセットして、put1回で描画できる感じです。
同時に表示する画像数が増えると、少し差が出てくると思います。
まあ、そんなに変わらない気もしていますが・・・。 -- (たろサ) 2012-04-03 14:27:01
- 了解です。今度、機会があれば試したいと思います。
また、いろいろ教えてください。 -- (DSLua@wiki) 2012-04-04 10:37:00
最終更新:2012年04月18日 23:44