先日頂いたお便りから。
Actorを2000個ほど生成すると処理落ちしてしまいます。処理落ちを改善する方法はありませんか?
というわけで、大量のアクターで処理落ちするという事態を少しでも緩和する手段をご紹介します。
AIMSのレイヤーには「高速描画モード」というものがありまして、レイヤーにはいくつかの制限がかかる代わりに描画速度が数倍に向上します。
(客観的評価はしていませんが、Actor2000個を表示して15fpsだったものが60fpsに向上する程度には高速化されます)
高速描画モードを入れるキーになる関数は下の2つ。
1 2 | setLayerUseFastDraw(レイヤーNo, ON/OFFフラグ[true/false]); setLayerGraphicForFastDraw(レイヤーNo, グラフィックハンドル); |
setLayerUseFastDrawが高速描画ON/OFFの設定。setLayerGraphicForFastDrawはそのレイヤーで使うテクスチャの指定です。
高速描画中の制限事項は下記の通り。
- 1レイヤーにつき、1枚のテクスチャしか使えない。(テクスチャの一部分を切り出すのはOK)。そのレイヤーで使う画像はすべて1枚のテクスチャにまとめてあること。
- ブレンディングはBLEND_NORMALのみになり、個々のアクターにMOVER_SETBLENDを指示しても無視される。
実装例としてはこんな感じ。レイヤー10を高速描画レイヤーにします。
1 2 3 4 5 6 7 | function boot_OnStart() -- まず画像を読み込む G.sample = loadGraphic("sample1.png"); setLayerUseFastDraw(10, true); -- レイヤー10を高速描画ON setLayerGraphicForFastDraw(10, G.sample); -- G.sampleをレイヤー10に割り付け G.chara = cutGraphic(G.sample,0,0,20,20); -- 切り出してもOK createActor(G.chara,320,240,10,"class"); -- このアクターは高速描画される |
まあ軽く書くとこんな感じです。弾幕のように大量のアクターをばらまく必要があるときは是非お試し下さい。
9月 15th, 2010 |