在MovieClip类的一部分中有一个未记录的addFrameScript方法。显然有些人使用该方法省略在时间轴中的帧内编写任何代码,并将所有代码放在一个单独的.as文件中(例如Maintimeline.as)。
当你将代码与它们分离并将它们放在另一个文件中时,我觉得实际的框架及其中的形状和对象会失去它们的物理意义。
这种方法是否是首选的,是否有任何实际的例子,通常这样做?
答案 0 :(得分:2)
总是更喜欢从代码中分离图形。 MovieClip中唯一允许的代码可能是stop()
命令,但最好还是解决这个问题。
就个人而言,我不使用addFrameScript()
因为我发现将图形与特定类关联起来更容易(通过在Flash中导出它,或者创建一个类并将MovieClip添加为属性)。如果图形或代码发生变化,使用起来会更清晰,站起来会更好。
答案 1 :(得分:2)
我尽量避免在时间轴上编写任何代码,因为它们使得事情变得非常难以理解:
如果省略所有时间轴代码,使用设计师/动画师也会容易得多。您所需要的只是一些需要严格遵守的准则:
现在实际上有一种情况我会在时间轴上编写代码,严格来说就是停止带有一个端点而没有暂停的线性动画。就是这样。
- 编辑 -
很少发生你真的需要一个framecript,大多数时候你可以用不同的方式解决它,这总是比较好的。
答案 2 :(得分:2)
我写了一篇关于如何保持所有“时间线优点”的文章,但仍然使用Creynders和Mr.Ms所描述的良好的OOP实践。香肠http://www.developria.com/2010/04/combining-the-timeline-with-oo.html。我为亚特兰大Flash和Flex用户组做了一个演示,包括基于那篇文章的文件,你可以在这里查看http://www.meetup.com/atlflex/files/。
答案 3 :(得分:1)
我经常对自己也有同样的疑惑。编程太长时间没有看到离开代码的绝对好处,但我肯定希望 - 在我看来 - 仍然保持时间轴和某些事件之间的联系。这是一个工具,所以显然只是放弃它是一个愚蠢的想法。
此外,您可以通过编程方式检索影片剪辑的当前帧和相应的标签。
http://adobe.ly/osU3A6 - 当前帧属性
http://adobe.ly/o1JVn5 - 框架标签列表
在ENTER_FRAME上编写一个侦听器,用于检查影片剪辑标签。您甚至可以编写一个很好的小服务,它可以提供一个集中的位置来注册具有某种特殊“标签语法”的侦听器。
这样的事情:
LabelDispatcher.addEventListener(movieClipTarget,frameLabel,callBackFunc);
我实际上并没有运行这个,我确信它会充满错误,但服务可能看起来像这样:
addEventListener(target:movieClip,frameLabel:String,callBack:Function):Boolean {
this.internalListOfListens.push( { target:target, frameLabel:frameLabel, callBack:callBack } );
}
当您准备开始对帧标签进行操作时,请在舞台的EnterFrame上注册此Listener:
public function labelListenerPulse(event:Event):void {
for( listenedTo:Object in this.internalListOfListens ) {
var target:MovieClip = listenedTo.target as MovieClip;
if ( target.currentFrameLabel == listenedTo.frameLabel ) {
var callBack:Function = listenedTo.callBack as Function;
callBack( new Event( blah blah blah... ) );
}
}
}