在 ActionScript 2 项目中,我可以创建一个新的 MovieClip,在库中右键单击它并选择“组件定义”以添加可以在 MovieClip 中引用的参数。可以在 MovieClip 的属性中轻松更改此参数。
现在,我正在处理一个 ActionScript 3 项目,但一直无法找到一种方法来获取在这些参数中传递的值。
我定义了一个名为“textToDisplay”的参数,但是当我在第一帧的 Actions 中编写以下内容时,出现错误:
trace(textToDisplay);
这是错误:
1120: Access of undefined property textToDisplay.
您知道如何捕获该参数的值吗?
谢谢
PS:我在 Windows XP 上使用 Adobe Flash CS3 Professional
最佳答案
考虑到要找到有关自定义组件设置的信息有多么困难,我想我会根据我的经验来澄清该过程的某些方面。
初始化事件:
除了一个异常(exception),上面的 aaaidan 示例大部分都是正确的。
addEventListener(Event.INIT, onInit);
应该是:
loaderInfo.addEventListener(Event.INIT, onInit);
DisplayObject 的 loaderInfo 属性引用了一个 LoaderInfo,您的组件从中获取其参数设置。 INIT 事件在获取数据时被调用(或者您可以使用 COMPLETE 事件,它应该在 INIT 之后直接触发)
可检查的元数据:
当您使用元数据 [Inspectable] 标签设置要访问的属性时,您还可以使用以下方法定义默认值:
[Inspectable(defaultValue="whatevervalue")]
根据我的经验,参数似乎无法处理除字符串(可能还有数字)以外的任何内容,因此我建议使用 set 函数来获取字符串值并使用它们来获取您可能需要的其他值。例如,如果你想加载一个特定命名类的新实例
[Inspectable(defaultValue="flash.display.Sprite")]
public function set className(value:String):void{
var ClassReference:Class = getDefinitionByName(value) as Class;
_class = new ClassReference();
}
在此示例中,如果参数设置为“flash.display.Sprite”,则调用“new _class()”将创建一个新的 Sprite 实例。
设置大小函数:
如果您希望您的自定义组件以一种不同于简单地拉伸(stretch)高度和宽度值的方式调整大小,您需要一个公共(public) setSize 函数。每次在 Flash 中调整组件大小时都会调用此函数。
public function setSize(w:Number, h:Number):void{
_menuWidth = w;
_menuHeight = h;
}
现在,当您在 Flash 中调整组件大小时,这非常有效,但是一旦您实际发布 swf 文件,您会注意到它切换回拉伸(stretch)宽度和高度,而不是使用您的 setSize 函数(我不知道为什么,但这就是它的作用).要解决这个问题,在您的 onInit 函数中,您需要获取宽度和高度,将它们提供给您的 setSize,然后将 scaleX 和 scaleY 值重置回 1:
public function onInit(e:Event):void{
setSize(width,height);
scaleX = 1;
scaleY = 1;
//add other functions that need to be run once the parameters are loaded
}
(如果有人发现更简单的方法,请告知)
希望这可以帮助人们启动和运行他们的自定义组件。
关于flash - Flash 设计器中的 AS3 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/322361/