コンテナ スプライトでのディスプレイスメント マップ フィルタの作成と適用に問題があります。設定はこんな感じ
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: コードにタイプミスがある場合は申し訳ありません。現在、開発マシンにいないため、書き直さなければなりませんでしたが、アルゴリズムの観点からは、まさに私が書いたものです。