【问题标题】:How to pass variables from .fla file to .as file in as3如何将变量从.fla文件传递到as3中的.as文件
【发布时间】:2016-12-29 20:56:26
【问题描述】:

我有一个 .fla 文件名 test.fla,其中有这个变量:

import Main;

var my_var;

stage.addEventListener(MouseEvent.CLICK, onLoaded);

function onLoaded(e:Event):void
{
 my_var = "Maziar";
 //trace(my_var);
}

我有一个名为 Main.as 的 .as 文件。

我想将 my_var 从 test.fla 传递到 Main.as。

如果您能在这件事上帮助我,我将不胜感激!

值得注意的是,我使用了“Actionscript 3 : pass a variable from the main fla to external as file”中提到的方法,但它对我不起作用!!!

我在我的 Main.as 中写道:

package 
{
import flash.display.Sprite;
import flash.geom.Point;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.Event;

public class Main extends Sprite
{
    public function Main()
    {
        if (stage)
        {
            init();
        }
        else
        {
            addEventListener(Event.ADDED_TO_STAGE, init);

        }

        addEventListener(Event.ENTER_FRAME, waitForMyVar);
    }

    private function waitForMyVar(e:Event):void
    {
        if (my_var != null)
        {
            trace(my_var);
            removeEventListener(Event.ENTER_FRAME, waitForMyVar);
        }

    }

    private function init(e:Event = null):void
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
    }
 ...
 }
}

提前致谢!

【问题讨论】:

    标签: actionscript-3 flashdevelop


    【解决方案1】:

    请务必注意,ActionScript 文档文件中的构造函数 Main 在框架内找到的代码之前运行。当您尝试访问 AS 文档中的 my_var 变量时,该变量尚未在框架中声明。

    因此,我们需要等待 Flash 运行帧。这可以使用Event.ENTER_FRAME 监听器来完成。

    例子:

    时间线代码(.fla 文件)

    var my_var:String = "my variable";
    

    文档代码(.as 文件)

    package {
        import flash.display.MovieClip;
        import flash.events.Event;
    
        public class Main extends MovieClip {
            public function Main() {
                addEventListener(Event.ENTER_FRAME, waitForMyVar);
            }
    
        private function waitForMyVar(e:Event):void {
            trace(my_var);
            removeEventListener(Event.ENTER_FRAME, waitForMyVar);
        }
    }
    

    附带说明,在用户单击该阶段之前,my_var 似乎未分配值。可以在waitForMyVar 函数中进行调整以等待my_var 为非空。

    例子:

    if(my_var != null) {
        trace(my_var);
        removeEventListener(Event.ENTER_FRAME, waitForMyVar);
    }
    

    希望这会有所帮助!

    【讨论】:

    • 感谢您回答我的问题。我已经完全按照您在回答中所说的做了,但它向我显示了这个错误:1120: Access of undefined property my_var.
    • 奇怪。该代码适用于我的机器。仔细检查您可能犯的任何错别字。如果你空了,请上传你的 fla 和 AS 文件。
    • 请再看我的查询,我已根据您的回答进行了编辑!
    • 我想我看到了问题所在。 removeEventListener 行应该在 if(my_var != null) 块中。否则,侦听器会立即被删除,并且不会再次检查 my_var 是否存在。这应该可以解决问题。一旦我点击了舞台,my_var 就被赋值为“Maziar”,并且打印正确。我已经更新了我的答案 - 很抱歉造成混淆!希望这会有所帮助。
    • 我把 removeeventlistener 放在 if 中,但它仍然显示错误:1120: Access of undefined property my_var!!!!!!!
    【解决方案2】:

    使用静态类成员。

    public class Main extends Sprite
    {
        static public var globalVar:* = 1;
    
        public function doWhatever():void
        {
            trace(globalVar);
        }
    }
    

    然后在 FLA 中:

    import Main;
    
    var M:Main = new Main();
    // or use sprite instance of Main
    
    M.doWhatever();
    Main.globalVar = "Hello World!";
    M.doWhatever();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多