0

我正在尝试从时间轴获取动态影片剪辑。

我有一个长度未知的时间线,其中一个关键帧(假设为 88)上有一个实例名称为“blah”的影片剪辑。
无论我做什么,我都无法获得对上述电影剪辑的引用。

这是我尝试过的:

trace(blah); // null
trace(this.blah); // null
trace(getChildByName("blah")); // null

if(currentFrame == 88)
    trace(getChildByName("blah")); // null

for(var i:int=0; i<numChildren; ++i)
    trace(getChildAt(i));
/* Returns:
 * [object MovieClip]
 * [object Shape]
 * null
 * [object TextField]
 */

// Assuming the first movie clip is the correct one
trace(getChildAt(0).name); // instance?? where ?? are random digits, I'm expecting "blah"

有人可以阐明如何通过代码导入时间线生成的对象吗?

4

4 回答 4

0

如果您刚刚导航到第 88 帧,则可能是您在初始化之前尝试使用它。尝试添加:

stage.addEventListener(Event.ADDED, onAdded);

function onAdded(event:Event):void
{
    trace("new object "+event.target);
    trace("new object name "+event.target.name);
}

并查看是否/何时创建

于 2008-12-20T12:38:01.400 回答
0

如果您加载一个 swf,其中的实例名称将无法直接使用,并且(取决于您的时间线的设置)使用 gotoAndStop() 或 gotoAndPlay() 进行移动也是如此。这将迫使您实施一种解决方法来侦听 Event.ADDED(在添加 swf 的情况下)或 Event.ENTER_FRAME 或 Event.RENDER(对于 gotoAndStop/gotoAndPlay)。

我不知道确切的细节,但http://bugs.adobe.com/jira/browse/FP-43上的评论包含有用的链接。

gotoAndPlay/Stop 问题还有另一种解决方法 - 通过在您已经设置实例名称但使符号不可见的第 1 帧添加关键帧,确保您的所有符号在整个影片剪辑中都可用。根据具体情况,这可能与侦听器解决方法一样麻烦,但有时它更干净。

于 2008-12-23T14:28:58.990 回答
0

里拉努纳,

我提前道歉 - 我不知道你对 Flash 有多少经验,所以我的建议可能是侮辱基本的......

首先,您是如何添加影片剪辑并为其指定名称的?你是通过IDE添加的吗?

如果是这样,我经常犯的一个错误是我在命名时选择了错误的东西。换句话说,我没有为剪辑 A 分配名称,而是将其分配给剪辑的父级。或者更糟的是,我无意中分配了框架标签而不是对象名称。

您描述的行为(而不是名称“blah”,影片剪辑的名称为“instance##”)与通过 IDE 添加剪辑一致,但未命名 - “instance##”是 Flash IDE 的默认值您尚未命名的对象的命名方案。

所以,我会仔细检查你是否真的分配了你认为你拥有的名字。

另一方面,如果您以编程方式添加该剪辑,您能否提供您用来执行此操作的代码?

干杯,马特

于 2008-12-27T17:13:58.403 回答
0

这是我们在 Flash Player 9 上遇到的异步问题。一个简单的解决方法是在更改帧后等待 ENTER_FRAME 事件的第一次调度,或者使用 ADDED 事件来了解您的对象何时添加到显示列表中。令人高兴的是,这个问题在 Flash Player 10 上得到了修复。

http://www.bytearray.org/?p=236

于 2008-12-27T17:47:57.507 回答