如何在外部.as脚本中调用按钮实例?
我在我的舞台上创建了一个按钮。我给自己定的实例名称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.*;
任何可能的解决方案?
更新: 我链接道具下的外部脚本,Class
为MyFlash_fla.MainTimeline
我已经得到了错误,只需添加this.
前init.add[...]
消除了“没有定义变种”。我目前的错误:TypeError: Error #2007: Parameter listener must be non-null
at 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()
- 这是什么?
您将需要通过主DisplayObjectContainer
访问按钮(可能this
在你的范围内,但很难知道没有更多的信息)
使用方法getChildByName(name:String):DisplayObject
引用init
按钮。
var init:Button = this.getChildByName("init") as Button;
init.addEventListener(MouseEvent.CLICK, begin);
应该做你想做的。
顺便说一句,不要打扰添加所有这些未使用的导入,您的主要问题是定位按钮的显示列表范围。
如果您展示了如何在外部脚本中进行链接,这将会很有帮助。
更新:我将stage属性下的外部脚本,`Class`链接为MyFlash_fla.MainTimeline。 – Salt 2010-12-07 23:49:58
我不确定这是否能解决您的问题,但如果我理解正确,您基本上希望能够从外部脚本控制阶段实例。
如果您的“按钮”在这种情况下是一个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;
}
}
}
希望这有助于!
你可以用当前代码更新吗?引用错误的可能性是我建议`getChildByName`的原因。 – ocodo 2010-12-08 03:23:47