2010-08-09 86 views
1

我试图嵌入一个swf到我的AS3 Flex项目是这样的:嵌入式button.swf不会触发Click事件

[Embed(source = "../assets/next_button.swf")] 
[Bindable] 
protected var nextButtonClass:Class; 
protected var next_btn:MovieClip = next_btn = new nextButtonClass() as MovieClip; 
// ... 
next_btn.addEventListener(MouseEvent.CLICK, onAdChange); 

next_button.swf是AS2及使用Adobe Flash CS4中创建。里面有一个按钮。

如果我在next_button.fla中将按钮符号的类型更改为movieclip,则在传递CLICK事件时没有问题。

我试图将next_btn投射到mx.controls.Button和fl.controls.Button类,在这种情况下next_btn变为null。

顺便说一下,按钮是反应鼠标悬停和单击事件正确,只是不会传递给上面的瑞士法郎。

有没有什么办法可以将Button事件传递给我的容器swf?

回答

0

尝试嵌入和从SWF里面,而不是整个SWF实例化的符号:

[Embed(source = "../assets/next_button.swf", symbol"MyButton")] 

你显然需要与按钮的实际符号名称,以取代MyButton

这应该让你更直接地访问它,因为它不会被Loader包裹。

+0

我给按钮名称 'next_btn的' 和改变的代码,以便: [嵌入(源= “../assets/next_button_as3.swf”,符号= “next_btn的”)] 我得到这些错误: 错误:定义找不到符号'next_btn' 错误:无法转码../assets/next_button.swf。 但我得到同样的错误,当我用next_button_as3.swf尝试它,我做错了什么? 我可以跟踪this.next_btn既SWF文件内,输出是这样: AS2 => _level0.next_btn AS3 => [对象next_button] – ekesken 2010-08-09 09:03:59

+0

需要设置一个 “链接ID”,而不是一个实例名。 http://www.jessewarden.com/archives/flex/preloader/flash_preloader_03.gif – grapefrukt 2010-08-09 10:15:20

+0

谢谢,我试过了,编译时没有错误。但“var next_btn:MovieClip = new nextButtonClass()as MovieClip;”代码这次将空值赋给next_btn变量。一个“新”运算符如何返回空值? – ekesken 2010-08-09 11:02:37

0

我不认为一个As3脚本可以访问AS2 SWF的属性。如果你有权访问fla,那么为什么不把flas按钮改成AS3项目呢?

+0

其实我已经写在同一个项目的AS2和AS3版本。我希望能够为这两个项目使用相同的资产。 资产将由一个设计师团队准备,我们手中可能没有cs4来更换flas。 正如你所说,如果资产是as3没有问题,并且我担心as2按钮没有解决方案。 – ekesken 2010-08-09 08:33:54

+0

有没有什么办法可以将逻辑与设计完全分开。如果你有一个设计师团队准备资产,这似乎是前进的方向。这样你就可以同时工作as2和as3。 实际上,这里真正的问题是设计和逻辑之间缺乏分离。 – PatrickS 2010-08-09 11:03:58

+0

这就是我们如何分离它:)我们的设计师团队不知道flex,mxml等,他们是二进制的人。 – ekesken 2010-08-09 15:06:11

1

总结,解决grapefrukt建议后,代码如下:

[Embed(source = "../assets/next_button.swf", symbol="next_button")] 
[Bindable] 
protected var nextButtonClass:Class; 
protected var next_btn:DisplayObject = new nextButtonClass() as DisplayObject; 
// ... 
next_btn.addEventListener(MouseEvent.CLICK, onAdChange);