2

コンテナ スプライトでのディスプレイスメント マップ フィルタの作成と適用に問題があります。設定はこんな感じ

public class ExplosionManager
{
    [Embed...] // this is an image I tested, basically a spherical displacement
    private var explodeDisplaceAsset:Class;
    private var explodeDisplace:Bitmap;
    private var displacementFilters:Array = new Array();
    private var displacementMaps:Vector.<BitmapData> = new Vector.<BitmapData>();
    private var unusedFilters:Vector.<DisplacementMapFilter> = new Vector.<DisplacementMapFilter>();
    private var unusedMaps:Vector.<BirmapData> = new Vector.<BitmapData>();

    public function ExplosionManager(container:Sprite)
    {
         explodeDisplace = new explodeDisplaceAsset();
         container.filters = displacementFilters;
    }
    public function ExplodeAt(pos:Point, force:int) : void
    {
         var newDisplaceMap:BitmapData;
         var newDisplaceFilter:DisplacementMapFilter;
         if(unusedFilters.length == 0)
         {
             newDisplaceMap = new BitmapData(64,64,true, 0x808080);
             newDisplaceMap.draw(explodeDisplace);
             newDisplaceFilter = new DispalcementFilter(newDisplaceMap, pos, BitmapDataChannel.RED, BitmapDataChannel.GREEN, force, force);
         }
         else
         {
              newDisplaceMap = unusedMaps.pop();
              newDisplaceFilter = unusedFilters.pop();
              newDisplaceFilter.componentX = force;
              newDisplaceFilter.componentY = force;
              newDisplaceFilter.mapPoint = pos;
              newDisplaceFilter.mapBitmap = newDisplaceMap;
         }
         displacementMaps.push(newDisplaceMap);
         displacementFilters.push(newDisplaceFilter);
    }
}

必要に応じてフィルターを再利用および作成する適応型オブジェクト プールを作成しようとしています。最初の考えでは、2 ~ 3 個の爆発トップがある場合、1 つのオブジェクトにのみ適用される 2 ~ 3 個のフィルターを使用する方が効率的であると考えていました。フレームごとに更新される 1 つの大きなビットマップを含む 1 つのフィルターを使用するのではなく、シーンの一部を使用します。問題は、パラメーターのどの組み合わせを試しても変位が見られないことです。何か間違っていますか?

PS: コードにタイプミスがある場合は申し訳ありません。現在、開発マシンにいないため、書き直さなければなりませんでしたが、アルゴリズムの観点からは、まさに私が書いたものです。

4

1 に答える 1