6

まず最初に、ここでのコンテキストは、 StarlingFrameworkを伴うActionscript3.0(IDE:Flashbuilder)であると言います。

そこで、プラットフォーマーなどに使えるタイルマップを作りたいと思います。

800x600ピクセルのステージで8x8ピクセルのタイルを使用したいのですが、問題は、フレームレートを大幅に下げることなく、これらの7500以上のタイルオブジェクトをステージに追加する方法がわからないことです。

パフォーマンスの低下は、各Tileオブジェクトの初期化ではなく、各タイルをステージに追加することによるものであることがわかりました。

具体的な情報はあまり提供していませんが、パフォーマンスを損なうことなく、何千もの静的オブジェクトをステージに描画するための標準化された方法があるかどうかを求めています。方法があるような気がしますが、まだ見つけていません。

アップデート:

あなたの親切な助けのすべての後、私は素晴らしい解決策と思われるものを見つけました。最初は、copyPixels()とdraw()を使用してAmyのソリューションを実装し、マップ全体に対して1つの大きなビットマップデータを作成してから、それを画面にレンダリングしたいと思いました。それから、これに相当するStarlingがあるかどうかを知りたいと思いました。なぜなら、StarlingとNative Flashを混ぜる必要がなければ、すべてがはるかに簡単になるからです。

Amyのおかげで、StarlingのRenderTextureクラスをもう少し調べたところ、「drawBundled()」メソッドと「draw()」メソッドを使用すると、すべてのタイルをRenderTextureに簡単に描画してから、RenderTextureを配置できることがわかりました。画像(Starlingの画像クラス)に追加し、その画像を画面に追加します。

その解決策は、スプライトなどを平坦化することで、私が以前に試したばかげた遅い解決策よりも100万倍高速です。初期化時間の両方で高速であり、renderTextureの画像が画面に表示されている間はフレームレートが低下しないようです。

これでテストしたいのは、ゲームプレイ中にタイルのグラフィックを簡単に更新できるかどうかです。たとえば、水がソース(または何か)から広がり、「Grass」タイルを「Water」タイルにする必要がある場合、RenderTextureとそのイメージは、ラグスパイクやパフォーマンスの一時的な中断なしに外観を変更できます。これをすぐにテストします。

よろしくお願いします!

4

2 に答える 2

9

ステージにそれほど多くのオブジェクトを追加しないでください。代わりに、ステージのサイズのBitmpaDataを作成し、copyPixels()またはdraw()を使用してステージに描画します。これがあなたが始めるべき記事です。次に、その投稿で学んだ概念を取り入れて、カバーされていない特定のことを学ぶことができます(flashandmath.comには、ピクセル操作に関する優れたチュートリアルがたくさんあります)

于 2012-08-12T02:07:57.290 に答える
3

ゲーム内を移動するときに追加および削除する必要のあるタイルを管理する必要があります。画面の中央から800ピクセル以内にあるステージタイルにのみ追加します。タイルが中心から800ピクセルを超えたら、それを削除します。それはすべてがスムーズに動くことを維持するはずです。幸運を。

または、タイルを1つのビットマップに描画/コピーすることを検討してください。基本的に、タイルを新しいビットマップにスタンプします。これがadobeの例です。

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;

var bmd1:BitmapData = new BitmapData(40, 40, false, 0x000000FF);
var bmd2:BitmapData = new BitmapData(80, 40, false, 0x0000CC44);

var rect:Rectangle = new Rectangle(0, 0, 20, 20);
var pt:Point = new Point(10, 10);
bmd2.copyPixels(bmd1, rect, pt);

var bm1:Bitmap = new Bitmap(bmd1);
this.addChild(bm1);
var bm2:Bitmap = new Bitmap(bmd2);
this.addChild(bm2);
bm2.x = 50;

ビットマップデータクラスの詳細。copyPixelsはあなたが求めているものだと思います。

于 2012-08-12T00:37:18.977 に答える