【问题标题】:Overriding in Flash IDE在 Flash IDE 中覆盖
【发布时间】:2011-09-01 18:41:19
【问题描述】:

我正在尝试覆盖 dispatchEvent(),但在 Flash IDE 中没有成功。复习Adobe docs的方法,应该很简单:

override function name()

正如Grant Skinner 所证明的,这很容易执行:

override public function dispatchEvent(evt:Event):Boolean {
    // code here
}

虽然彻底的谷歌搜索会在 Class 文件中成功使用此语法,但在时间线代码中这样做,在 Flash IDE 中本机被证明是不可能的。第一个问题是使用public 会引发错误1114: The public attribute can only be used inside a package.

这很明显,但是在删除它后,运行以下命令(在新 .fla 文件的第一帧上):

override function dispatchEvent(evt:Event):Boolean {
    trace(evt.type);
    return super.dispatchEvent(evt);
}

导致此错误:1024: Overriding a function that is not marked for override.

Documentation on this error 暗示我未能在同名函数前面加上 override 语句,但显然这是一个谬误,我对解决方案可能是大吃一惊。

明确地说,我们知道类文件可以工作,但这是一个无关紧要的问题。我们如何让override function dispatchEvent() 在时间线代码中工作?

【问题讨论】:

  • 您可能无法从时间线代码中做到这一点。您可能必须从时间线代码切换到具有扩展 MovieClip 的“文档类”,而后者又扩展了 EventDispatcher,因此有一个 dispatchEvent 函数可以覆盖。

标签: flash actionscript-3 overriding timeline dispatchevent


【解决方案1】:

您只能覆盖您扩展的类(基类)的类方法。
这遵循继承规则。
当你扩展一个类时,你继承了它的所有方法。覆盖方法允许您重新构造该方法。访问一个方法和覆盖它是两件不同的事情。

public class SomethingSomething extends Event{
  public function SomethingSomething ( ):void{
  }
  override public function dispatchEvent(evt:Event):Boolean {
    trace(evt.type);
    return super.dispatchEvent(evt);
  }

}

【讨论】:

  • 哇...我只是假设 FLA 文档是 MainTimeline 类,我还假设它继承自 MovieClip。那么文档类是空白画布吗?如果属实,这肯定可以解释这个问题。
  • 当然是真的。但是,您可以创建一个 Main 类并将其用于您的文档类,并扩展您需要的内容。归根结底是您需要创建一个类来覆盖另一个类的功能。
【解决方案2】:

dispatchEvent() 是公开的,您的代码默认使用默认命名空间。你需要做 覆盖函数 dispatchEvent(evt:Event):Boolean

【讨论】:

  • Epsdz:我假设您的回复被意外缩短了,但据我了解,命名空间应该是相同的。正如Senocular points out,“任何定义为公共的东西都可以在任何地方被任何东西访问。”无论如何,可以肯定的是,在文档开头尝试use namespace public; 并不能解决问题,正如人们可能假设的那样。
【解决方案3】:

1.下面是一个类

    package{
        import flash.display.MovieClip
        public class myClass{
            public function myClass(){
                // constructor code
                trace("this is constructor")
                waitToOverride()//trace this is overrided code of waitToOverride
            }
            static function waitToOverride(){
                //wait to override
                trace("this is original code of waitToOverride")
            }
        }
    }

2.flash IDE中的以下使用。库中的一些对象链接ActionScript class(C):myClass。然后在对象的MainTimeLine中键入以下代码

    function waitToOverride(){
        // this will override myClass's waitToOverride method.
        trace("this is overrided code of waitToOverride");
    }
    waitToOverride()//this is overrided code of waitToOverride

ps。只要去做,你就会明白我的意思。 牛武编辑 http://blog.yam.com/celearning/article/28409939

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多