2010-12-07 103 views
1

我在我的舞台上创建了一个按钮。我给自己定的实例名称init并有MainTimeline从外部脚本被称为:如何在外部.as脚本中调用按钮实例?

./Project/MyFlash.fla

./Project/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.*; 

任何可能的解决方案?


更新: 我链接道具下的外部脚本,ClassMyFlash_fla.MainTimeline

我已经得到了错误,只需添加this.init.add[...]消除了“没有定义变种”。我目前的错误:TypeError: Error #2007: Parameter listener must be non-nullat flash.events::EventDispatcher/addEventListener()at tfm::MainTimeline()。对不起,最初不完全清楚,但我在我的舞台上有一个按钮,我试图让它执行功能,每当点击时,执行begin()。目前,该错误被返回并且begin()在没有任何交互的情况下被执行。


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

+0

你可以用当前代码更新吗?引用错误的可能性是我建议`getChildByName`的原因。 – ocodo 2010-12-08 03:23:47

回答

0

您将需要通过主DisplayObjectContainer访问按钮(可能this在你的范围内,但很难知道没有更多的信息)

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

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

应该做你想做的。

顺便说一句,不要打扰添加所有这些未使用的导入,您的主要问题是定位按钮的显示列表范围。

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

+0

更新:我将stage属性下的外部脚本,`Class`链接为MyFlash_fla.MainTimeline。 – Salt 2010-12-07 23:49:58

1

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

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

控制/右击您制作的图书馆项目并转到“属性”。从那里,你需要勾选“导出脚本”框。你会想给这个自定义按钮对象一个类名(并且舞台上的东西将是这个类的一个实例)。

Next: 如果您的.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; 
     } 

    } 

} 

希望这有助于!