Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
flashide中的重写_Flash_Actionscript 3_Overriding_Timeline_Dispatchevent - Fatal编程技术网

flashide中的重写

flashide中的重写,flash,actionscript-3,overriding,timeline,dispatchevent,Flash,Actionscript 3,Overriding,Timeline,Dispatchevent,我试图覆盖dispatchEvent(),但在Flash IDE中没有成功。回顾该方法,它应该是: override function name() 如所示,这是一种常见且容易执行的操作: override public function dispatchEvent(evt:Event):Boolean { // code here } 虽然彻底的谷歌搜索将在类文件中成功地重复使用这种语法,但在时间线代码中这样做,而在flashide中本机使用是不可能的。第一个问题是使用public

我试图覆盖dispatchEvent(),但在Flash IDE中没有成功。回顾该方法,它应该是:

override function name()
如所示,这是一种常见且容易执行的操作:

override public function dispatchEvent(evt:Event):Boolean {
    // code here
}
虽然彻底的谷歌搜索将在类文件中成功地重复使用这种语法,但在时间线代码中这样做,而在flashide中本机使用是不可能的。第一个问题是使用
public
会引发错误
1114:public属性只能在包内使用。

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

导致此错误:
1024:重写未标记为重写的函数。

这意味着我没有用
override
语句作为同名函数的前缀,但显然这是一个谬误,我对解决方案感到震惊

要清楚,我们知道类文件可以工作,但这是一个不相干的问题。如何让
重写函数dispatchEvent()
在时间线代码中工作?

dispatchEvent()是公共的,并且您的代码正在解除到默认命名空间。你需要做什么
重写函数dispatchEvent(evt:Event):布尔值

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

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

}

下面是一节课

    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类(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
附言:只要你去做,你就会明白我的意思。 鸟屋编辑

Epsdz:我假设您的回复被意外地缩短了,但我理解名称空间应该是相同的。正如“任何定义为公共的东西都可以被任何东西访问。”无论如何,可以肯定的是,尝试
使用namespace public并不能解决问题,正如人们可能认为的那样。您可能无法通过时间线代码来解决问题。您可能需要从时间线代码切换到一个“文档类”来扩展MovieClip,后者反过来扩展EventDispatcher,因此有一个dispatchEvent函数要覆盖。哇。。。我只是假设FLA文档是一个MainTimeline类,我还假设它是从中继承的。那么文档类是空白画布吗?如果是真的,这肯定可以解释这个问题。当然是真的。但是,您可以创建一个主类,并将其用于您的文档类,并对其进行扩展。归根结底,您需要创建一个类来重写另一个类的函数。
    function waitToOverride(){
        // this will override myClass's waitToOverride method.
        trace("this is overrided code of waitToOverride");
    }
    waitToOverride()//this is overrided code of waitToOverride