【发布时间】:2013-07-01 06:41:07
【问题描述】:
我在容器 Sprite 上创建和应用置换贴图过滤器时遇到问题。设置是这样的
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 个过滤器会更有效应用于场景的一部分,而不是使用一个带有单个大位图的过滤器,该位图每帧都会更新。 问题是,无论我尝试什么参数组合,我都看不到任何位移,是我做错了什么吗?
PS:对不起,如果代码有一些错别字,我现在不在我的开发机器上,所以我不得不重写它,但从算法的角度来看,这正是我写的。
【问题讨论】:
-
您是否在代码中应用了过滤器?您是否添加了 Bitmap 对象以在任何地方显示列表?
-
我认为这一行就足够了 container.filters =displacementFilters;
-
我是在爆炸管理器的构造函数中添加过滤器,不知道需要将位图添加到显示列表中,我遵循的在线教程仅添加它以供参考跨度>
标签: actionscript-3 flashdevelop