5

フラッシュのループについて質問があります....

タイルゲームで、レベル全体のミニマップを作成しています。マップをレンダリングする方法は、別の for ループ内に for ループがある関数です。各タイル位置を循環し、タイルの内容に応じて色付けされたマップ ピース (基本的には 3x3 ピクセルの正方形) を添付します。とにかく、私の問題は、レベルが 50x50 タイルのように大きくなると、マップの再描画に永遠に (最大 3 秒) かかることです。とにかくこれを修正する方法はありますか?または、ミニマップを行う別の方法はありますか?? レベルがさらに大きくなると、10 秒ほどかかることもあります。

どんな助けでも大歓迎です!

ありがとう、マット

4

4 に答える 4

3

Flash doesn't render tiles very fast. It's great at storing graphics that don't change in a buffer and quickly displaying this buffer quickly. Every graphics object (or sprite) that is added as a child to the stage has to be rendered independently.

Your problem is flash has to draw 50x50 = 2500 tiles every frame! Even if they 3x3 pixels, flash still treats them as separate objects.

It would be nice if you could store everything in a buffer or in one object and display it. So try drawing these 3x3 tiles in the same object instead of multiple objects. However this might hinder your functionality as the whole object will have to be re-rendered every frame.

Some other suggestions might be to render the objects in larger cells on a grid. Instead of having 50x50, start with 10x10 and then draw 5x5 cells in each cell. This would probably speed things up.

Hope this helps. If you find a good solution please post!

于 2008-10-01T06:01:48.273 に答える
1

ほとんどの場合、遅いのは(ここで述べたように)ループです。0〜2500のカウントは非常に高速ですが、各反復で大量の計算を実行している場合は、合計されます。もちろん、コードを見ずにこれを支援することはできません。同じループをよりスムーズに実行するためのトリックを実行することもできますが(複数のフレームで実行するなど)、3秒のループの場合は、最適化するためにできることがたくさんあります。それが長すぎるヒックアップを引き起こさないように。

于 2008-10-01T18:54:03.567 に答える
1

はい。ループ自体はまったく時間がかかりません。しかし、各反復で、ライブラリからmovieClipを添付しています。ちなみに、ユーザーが一時停止(スペース)を押したときだけ、enterFrameではこれを実行していません。

于 2008-10-01T14:32:20.950 に答える
0

ループ自体の実行にそれほど時間はかからないはずですが、各ループ内で正確に何を行っているのでしょうか? 地図のピースを貼り付けたり、色を塗ったりする操作は?

-アダム

于 2008-10-01T05:46:24.613 に答える