如何在外部.as脚本中调用按钮实例?

时间:2010-12-07 23:25:35

标签: flash actionscript-3

我在舞台上创建了一个按钮。我已将实例名称设置为init,并从外部脚本调用MainTimeline

./项目/ MyFlash.fla

./项目/ MyFlash_fla / MainTimeline.as

我是Flash的初学者,尝试创建一个按钮并在MainTimeline.as内调用它;错误返回: ReferenceError: Error #1065: Variable init is not defined. at tfm::MainTimeline()

我也试过var init:Button = new Button();而没有运气。

更具体地说,我正在尝试这样做:

function MainTimeline(){
    //var init:Button = new Button();
    init.addEventListener(MouseEvent.CLICK, begin);
}
function begin(){
    addFrameScript(0, frame1);
}

这些是我的进口(我甚至在挫折中添加了无用的东西):

import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.system.*;
import flash.utils.*;
import flash.text.*;
import flash.xml.*;
import flash.media.*;
import fl.controls.Button;
import flash.*;
import fl.*;
import fl.controls.*;

任何可能的解决方案?


更新: 我将舞台属性Class下的外部脚本链接为MyFlash_fla.MainTimeline

我通过简单地在this.之前添加init.add[...]来消除'var not defined'错误。我当前的错误:TypeError: Error #2007: Parameter listener must be non-null at flash.events::EventDispatcher/addEventListener() at tfm::MainTimeline()。抱歉一开始并没有完全清楚,但我的舞台上有一个按钮,我试图让它在点击时执行函数begin()。目前,返回该错误并且在没有任何交互的情况下执行begin()


更新II。  我在event:Event中添加begin(event:Event){...消除了上一个错误。一切似乎都在顺利进行。我虽然留下了错误;它不会影响任何事情,但我仍然希望摆脱它:ReferenceError: Error #1065: Variable init is not defined. at tfm::MainTimeline/__setProp_init_Scene1_Layer1_0() at tfm::MainTimeline() - 这是什么?

2 个答案:

答案 0 :(得分:1)

我不确定这是否能解决您的问题,但如果我理解正确,您基本上希望能够从外部脚本控制舞台实例。

如果你的“按钮”在这种情况下是一个flash对象,你变成了一个符号,并选择了“按钮”类型的符号,那么你需要确保在.fla文件的库中,您为Actionscript导出该符号。

控制/右键单击您创建的库项目,然后转到“属性”。从那里,您需要选中“Export for Actionscript”框。您需要为此自定义按钮对象指定一个类名(并且舞台上的东西将是此类的实例)。

下一步: 如果您的外部.as文档被称为“MainTimeline.as”,您可能希望将.fla文件的文档类设为“MainTimeline”(假设它与您的.fla文件位于同一目录中,它似乎是)。您可以通过单击.fla文件中的舞台(或者只是取消选择其他所有内容)并进入属性菜单框来完成此操作。在它所说的类:[空白文本区域]的部分中,您需要填写“MainTimeline”。那就意味着MainTimeline是这个swf的整体基类,并且你在这个类中可以访问你添加到舞台的任何实例(就像它们是由实际.as文件中的代码创建的实例一样)。

在那个MainTimeline.as文件中,如果你将以下文本放入其中,并且在编译和运行你的swf时你的按钮变得不可见,这应该表明事情正在发挥作用。

MainTimeline.as代码试用:

package
{
    import flash.display.MovieClip;

    public class MainTimeline extends MovieClip
    {
        public function MainTimeline()
        {
            init.visible = false;
        }

    }

}

希望这有帮助!

答案 1 :(得分:0)

您需要通过主DisplayObjectContainer访问该按钮(可能在您的上下文中为this,但如果没有更多信息则很难知道)

使用getChildByName(name:String):DisplayObject方法引用init按钮。

var init:Button = this.getChildByName("init") as Button;
init.addEventListener(MouseEvent.CLICK, begin);

应该做你想做的事。

顺便说一句,不要费心添加所有未使用的导入,你的主要问题是找到init按钮的显示列表范围。

如果您展示了如何在外部脚本中进行链接,那将会很有帮助。