Actionscript 3 从电影剪辑中读取属性的最佳方式?
我有一个.fla文件,里面有一些movieclip实例放在场景中。我需要遍历它们并收集一些数据,比如位置、名称和自定义属性Actionscript 3 从电影剪辑中读取属性的最佳方式?,actionscript-3,flash,Actionscript 3,Flash,我有一个.fla文件,里面有一些movieclip实例放在场景中。我需要遍历它们并收集一些数据,比如位置、名称和自定义属性 这些自定义属性,我不知道如何传递它们,我知道到目前为止一种有效的方法是使用可访问性属性面板(Flash Pro CC),然后在代码中我可以读取它们。不过,我认为应该有更好的方法。首先,您可以从代码中设置时间线实例的属性。这没什么特别的。例如: 将库符号的实例放置在关键帧上 在“属性”面板中为其指定一个实例名称,例如“myInstance” 在同一关键帧上放置一些引用它的代码
这些自定义属性,我不知道如何传递它们,我知道到目前为止一种有效的方法是使用可访问性属性面板(Flash Pro CC),然后在代码中我可以读取它们。不过,我认为应该有更好的方法。首先,您可以从代码中设置时间线实例的属性。这没什么特别的。例如:
myInstance.color=“red”
如果需要,您可以对组件进行更多操作,例如实时预览和编译组件。更多信息可以在这里找到:如果我正确理解了您的问题以及您在关于@Aaron答案的评论中所说的话,您有一个swf文件,您可以动态加载该文件,并且您希望获取/设置它的一些MovieClips属性,如果是这样,请以下面的示例为例: MyMC.as:
public class MyMC extends MovieClip
{
private var timer:Timer;
private var rotation_speed:int = 1;
public function MyMC() {
}
public function set_Rotation_Speed(_rotation_speed:int): void {
this.rotation_speed = _rotation_speed;
}
public function get_Rotation_Speed(): int {
return this.rotation_speed;
}
public function start_Rotation(): void {
this.timer = new Timer(500, 10);
this.timer.addEventListener(TimerEvent.TIMER, on_Timer);
this.timer.start();
}
private function on_Timer(e:TimerEvent): void {
this.rotation += this.rotation_speed;
}
}
然后,在我的swf.swf
中,我有一个MovieClip的实例
我使用以下代码加载了swf.swf
:
var loader:Loader = new Loader()
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, on_SWFLoad);
loader.load(new URLRequest('swf.swf'));
为了设置/获取我的一些MovieClip属性,我做了:
function on_SWFLoad(e:Event): void
{
var swf:DisplayObjectContainer = DisplayObjectContainer(loader.content);
var num_children:int = swf.numChildren;
for(var i:int = 0; i < num_children; i++)
{
var child:MovieClip = MovieClip(swf.getChildAt(i));
// get the name
trace('name : ' + child.name);
// set the position
child.x = child.y = 100;
// get the class name, in my case it's MyMC
var class_name:String = getQualifiedClassName(child);
// get all the details of the child
trace(describeType(child));
child.set_Rotation_Speed(45);
child.start_Rotation();
trace(child.get_Rotation_Speed()); // gives : 45
}
addChild(loader);
}
_SWFLoad上的函数(e:事件):无效
{
var swf:DisplayObjectContainer=DisplayObjectContainer(loader.content);
var num_children:int=swf.numChildren;
for(变量i:int=0;i希望这能有所帮助。组件定义部分会很好,我只需要能够从代码中读取这些值。我不是用Flash来编写代码,只是为了创建一些动作。你可以使用实例名和属性名从代码中引用它们,例如:
myInstance.color
是的,这不起作用。我需要澄清的是,我是在我的IDE中读取属性,而不是在时间线中。我动态加载我的SWF,然后尝试读取其中的值。例如,我添加了一个默认值为“asd”的myVar,然后在我的代码中执行unit1.myVar,它返回未定义的。“在我的IDE中”意味着什么?在一个.as文件中?在任何情况下,它都应该工作,您可能有时间或范围问题。发布一些代码。所谓“在我的IDE中”,我的意思是我没有试图从时间轴访问组件值,它可能具有不同的范围/行为。我已经有一段时间没有在时间线内写代码了。(感谢上帝)。所以我创建并放置在舞台上的新符号(在Flash Pro CC中)将用作MyMC类而不是MovieClip,对吗?。在这种情况下,如何将MyMC指定为符号的类?。我试过这么做,但它的工作方式有点笨拙,它要求我保存一个新的.as文件,但它从未使用过它。@Artemix是的,没错,它是MovieClip的一个子类。如果您需要编辑该类,请执行该操作,否则,Flash将自动生成该类。