【问题标题】:EventListeners de-registering themselves?EventListeners 注销自己?
【发布时间】:2009-08-16 08:32:30
【问题描述】:

我有一个小精灵,它是 Flash 动画中导弹后面的“烟雾轨迹”。我创建了一个独立的类来处理自身的创建和删除:

public class Spark extends Sprite {
    private var lifetime:Number = 15;
    private var gfxRef:MovieClip = new fx_particleTrail();
    private var canvas:Sprite;

    public function Spark(x:Number, y:Number, to:Sprite) {
        gfxRef.x = x;
        gfxRef.y = y;
        canvas = to;
        canvas.addChild(gfxRef);
        addEventListener(Event.ENTER_FRAME, tick);
    }

    private function tick(e:Event):void {
        lifetime --;
        gfxRef.alpha -= 0.05;
        if (lifetime <= 0) {
            gfxRef.alpha = 0;
            removeEventListener(Event.ENTER_FRAME, tick);
            canvas.removeChild(gfxRef);
            gfxRef = null;
        }
    }
}

似乎一切正常 - 我无法从这个例程中追踪任何错误。然而,有时一个火花会永远粘在屏幕上——生命周期计数器停在某个数字上,永远不会前进。就好像 EventListener 刚刚决定放弃幽灵一样。

我很确定这不是初始化,因为它们会在 Alpha-tude 的各种状态下失败,这表明在某个时刻存在大规模失败。

我认为可能一次生成这么多是一个问题,但我操纵它来生成一个 - 我扔了一些痕迹:

  > Born
  > 15
  > 14
  > 13
  > 12

到此为止。放置了事件监听器,但由于某种原因它刚刚停止!s

这适用于 AS3/记事本中的 FlexSDK(不使用 Flash 开发环境)。

救命!

【问题讨论】:

    标签: flash actionscript-3 event-handling


    【解决方案1】:

    您的代码没有任何问题。我强烈怀疑问题不在于您发布的代码,而在于其他地方。如果我获取您的确切代码并运行它(同时注释掉与 gfx 相关的内容),它会按预期倒数到 0。

    什么是管理 Spark(或 Spark 集合)?您确定每个 Spark 实例的生命周期都足够长吗?

    最后,您的一般方法效率不高。让每个 Spark 都有自己的事件侦听器并不是绝对必要的,您应该考虑一个具有单个更新循环并管理所有 Spark 的类。看看一些现有的粒子系统,比如flint particles

    【讨论】:

    • 也许提问者愿意发布他的项目,如果他觉得这样做很舒服?
    • 嗯,你看起来完全正确!看起来课程的内容被垃圾收集得有点早。感谢您的提示!
    【解决方案2】:

    可能导致这种情况的一件事是 gfxRef 在构造函数之外的实例化。我确信如果你对一个数组执行此操作,它将变成一个静态变量,由所有对象共享。尝试在构造函数中实例化它。

    而且你实际上并不需要 gfxRef,你可以只使用这个类,因为它扩展了 Sprite。移除 gfxRef,并将所有对它的引用改为 this。然后将其附加到您在 Flash 中制作的影片剪辑中,并在该影片剪辑中绘制烟雾云。

    【讨论】:

    • "我确定如果你对数组执行此操作,它将变成一个静态变量,由所有对象共享。"这只是 Actionscript 2 中的一个问题。Actionscript 3 类正确地将这些属性作为成员属性而不是静态属性处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2018-12-27
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多