我在舞台上创建了一个按钮。我已将实例名称设置为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()
- 这是什么?
答案 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
按钮的显示列表范围。
如果您展示了如何在外部脚本中进行链接,那将会很有帮助。