sprite vs putrotg サンプル

 スプライト描画と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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。