我在创建和应用容器Sprite上的位移贴图过滤器时遇到了问题。该设置是这样的DisplacementMapFilter没有显示在闪存中
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爆炸上衣它会是更高效的自适应对象池有2-3个滤镜只适用于场景的一部分,而不是只有一个滤镜具有每帧更新的单个大位图。 问题是,无论我尝试使用什么参数组合,我都看不到任何位移,有没有我做错的事情?如果代码有一些错别字,我现在不在我的开发机器中,所以我不得不重写它,但是从算法的角度来看,这正是我写的。
您是否在代码中应用了过滤器?你是否添加了Bitmap对象以在任何地方显示列表? – GeorgeCross
我以为这行就足够了container.filters = displacementFilters; –
我在爆炸管理器的构造函数中添加了过滤器,我并不知道有必要将位图添加到显示列表中,我跟随的在线教程仅将其添加为参考 –