BitmapData子类和逐帧代码



我有一个BitmapData的子类,打算作为Stage3D纹理的随机像素源。为了简化问题,我想添加一个函数,在将帧渲染到后缓冲之前,以每帧为基础更新噪声。这可以通过如下方式编写构造函数来实现

public function NoiseTexture(stage:Stage, size:int) {
    super(size, size, true, 0);
    stage.addEventListener(Event.ENTER_FRAME, updateNoise, false, 1);
}

,然后将呈现函数(也是每帧)的优先级设置为0,以确保首先执行此代码。但是,在测试中,我注意到当NoiseTexture实例被设置为null或重新实例化时,updateNoise函数继续被调用(现在在重新实例化的情况下调用两次)——这是有意义的,因为事件侦听器被添加到类外部的对象中。我想知道是否有一种偷偷摸摸的方法来处理从类内部删除事件侦听器,或者如果我必须在外部处理。

您可以使用弱侦听器,它将在对象解引用时被删除。为此,在添加事件侦听器时将useWeakReference参数设置为true。

stage.addEventListener(Event.ENTER_FRAME, updateNoise, false, 1, true);

为类创建dispose|clear方法是一个很好的实践,就像C语言中的dealloc方法一样。此外,你应该使用弱引用,如前面提到的@Vesper。

//Some class
public function dispose():void{
    //clear references, stop timers, remove listeners
    stage.removeEventListener(Event.ENTER_FRAME, updateNoise);
}

最新更新