我正在尝试从时间轴中获取动态影片剪辑。
我有一个未知长度的时间轴,其中一个关键帧(在这种情况下假定为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"
有人可以了解如何通过代码导入时间轴生成的对象吗?
答案 0 :(得分:0)
如果您刚刚导航到第88帧,则可能是您在初始化之前尝试使用它。尝试添加:
stage.addEventListener(Event.ADDED, onAdded);
function onAdded(event:Event):void
{
trace("new object "+event.target);
trace("new object name "+event.target.name);
}
并查看是否/何时创建
答案 1 :(得分: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帧添加关键帧来确保所有符号在整个动画片段中可用,您已经在第1帧添加了实例名称,但使符号不可见。根据情况,这可能与听众的解决方法一样繁琐,但有时它更清晰。
答案 2 :(得分:0)
LiraNuna,
我提前道歉 - 我不知道你对Flash有多么有经验,所以我的建议可能是侮辱性的......
首先,您是如何添加影片剪辑并为其指定名称的?你是通过IDE添加的吗?
如果是这样,我经常犯的一个错误就是当我命名时我选择了错误的东西。换句话说,我不是为剪辑A指定名称,而是将其分配给剪辑的父级。或者更糟糕的是,我无意中分配了一个帧标签而不是一个对象名称。
您描述的行为(而不是名称'blah',影片剪辑的名称为'instance ##')与通过IDE添加剪辑一致,但不是命名它 - 'instance ##'是Flash IDE的默认命名方案,适用于您自己未命名的对象。
所以,我会仔细检查你是否确实指定了你认为的名字。
另一方面,如果您以编程方式添加该剪辑,是否可以提供您以前使用的代码?
干杯, 马特
答案 3 :(得分:0)
这是我们在Flash Player 9上遇到的异步问题。一个简单的解决方法是在更改帧后等待第一次发送ENTER_FRAME事件或使用ADDED事件知道何时将对象添加到显示列表中。令人高兴的是,此问题已在Flash Player 10上修复。