【问题标题】:How to call a function inside .FLA from an AS Class如何从 AS 类调用 .FLA 中的函数
【发布时间】:2013-03-12 13:13:52
【问题描述】:

我的 Main 类已添加到我的 .fla 阶段,我想在动画完成后删除并重新添加/“重新启动”该类。我所有的动画都发生在 Main 中,并被添加到 Main 中的显示树中。如何在 Main.as 中运行 finishNow() 函数?

.fla 文件:

var run:Main = new Main(this);
stage.addChild(run);

function finishNow() {
    stage.removeChild(run);
    var run:Main = new Main(this);
    stage.addChild(run);
}

Main.as 文件:

var stageHolder:Object;

public function Main(stageHolderTemp) {
        stageHolder = stageHolderTemp; 
        trace(stageHolder);
}

function callFinishFunction():void {
    // how to call finishNow() function from .fla file here
}

编辑:程序的设计已经改变。仍在尝试做同样的事情(调用 finishNow() 函数——但它现在在 Program.as 中)。一切正常,除了为program.finishNow(); 引发错误:

TypeError:错误 #1009:无法访问空对象引用的属性或方法。

.fla 文件:

它现在不包含任何代码。它链接到 Program.as。

Program.as 文件:

package  {

    import flash.display.MovieClip;

    public class Program extends MovieClip {


        public function Program() {

            startNow();
        }

        function startNow() {
            var run:Main = new Main(this);
            addChild(run);
        }

        function finishNow() {
            removeChild(run);
            var run:Main = new Main(this);
            addChild(run);
        }

    }

}

Main.as 文件:

package {

    import flash.display.Sprite;

    public class Main extends Sprite
    {

        var stageHolder:Object;
        public var program:Program;

        public function Main(stageHolderTemp) {
            stageHolder = stageHolderTemp; 
            trace(stageHolder);

            someFunctionsThatDrawGraphics();
        }

        function callFinishFunction():void {
            // how to call finishNow() function from Program.as file here?
            program.finishNow();
        }

    }
}

【问题讨论】:

    标签: actionscript-3 flash oop air main


    【解决方案1】:

    您可以拨打addframeScript调用FLA函数。

    【讨论】:

      【解决方案2】:

      如果你的 .fla 链接到 Main.as 文件,你可以直接调用。试试这个:

      public function Main() {
              finishNow();
      }
      

      .fla 代码

      function testFunction()
      {
          trace("111");
      }
      

      .as 文件

      package  {
      
          import flash.display.MovieClip;
      
      
          public class Main extends MovieClip {
      
      
              public function Main() {
      
                  testFunction();
              }
          }
      
      }
      

      【讨论】:

      • 当我尝试调用 finishNow();/testFunction(); 时出现错误 1180:调用可能未定义的方法 addFrameScript。我的 Main AS 类已经扩展了 Sprite,所以它不能扩展 MovieClip(为了调用该函数必须这样做吗?)
      • 您必须了解不同的 Sprite 和 MovieClip。精灵没有框架脚本。与 Sprite 对象不同,MovieClip 对象具有时间线。所以,如果你想在 .fla 中调用函数,必须扩展 MovieClip。
      • 好的,我已将 Sprite 更改为 MovieClip,但它给出了 ArgumentError:错误 #1063:Main() 上的参数计数不匹配。预期为 1,得到 0。在 Main 中绘制的动画不再出现。
      • 你的主构造函数不能有任何参数。喜欢Main(); 看看我的代码。并比较实际的代码。我的代码是对的。如果您仍然无法工作,请复制并粘贴。
      • 你的设计是错误的。 Main.as.已经提到了舞台。 Main.as 是看一个阶段。并且您的语法错误new Main(this); 类构造函数没有任何参数。但你传递给this;
      【解决方案3】:

      其实,不需要每次都创建类对象。每次调用该类中的函数就足够了。

      但是对于你的问题.. 试试这个....

      在程序中

          var run:Main = new Main(this);
          run.addEventListener("FINISH",finishNow);
          addChild(run);
          function finishNow(e:Event)
          {
           }
      

      在 main.as 中,

      function callFinishFunction():void
       {
        dispatchEvent(new Event("FINISH"));
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 2012-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        • 2012-06-17
        相关资源
        最近更新 更多