2013-10-04 25 views
2

我想这是一个真正的专家的问题只..AS3如何检测显示对象是否受补间动画影响?

我使用Flash Authoringtool来创建影片剪辑,但我用他们自己的引擎(它的行为更好的移动)播放它们。

然而,为了正确的行为,给定一个DisplayObject,我需要知道它的父代是否将其补充到它所属的MovieClip中。

我已经拿出蛮力和非优雅的方式做到这一点:

  • 在创作工具中,添加前缀到任何影片剪辑,是受补间的名称。该名称前缀可以随时检查。当然,因为这个前缀是一个手动过程,所以很容易忘记或错误输入一个。

  • 在代码中,播放其所有帧的主动画片段的每个子动画片段,并为其所有子帧检测这些帧中的任何帧的转换矩阵是否更改。如果是,则自动为其名称加前缀。虽然已经自动化,但此解决方案可能会占用较大的影片剪辑的显着时间。

那么,我希望的是存在像其他一些方式:

if((dpo.parent) as MovieClip) != null) 
{ 
    bDpoIsBeingTweened = ((dpo.parent) as MovieClip).someProperty; 
} 

期待任何优雅的解决方案。

+0

我不知道你的动画应该有多灵活......使用精灵表会有意义吗?此外,是从代码创建的动画还是Flash创作时间线? –

+0

使用Flash创作时间轴创建动画(因为我喜欢所见即所得的方法)。 我使用的唯一补间动画是补间动画。然后,我自己的软件将其转换为我称之为“MovieClipInterpolator”对象。对于选定的帧率,它会计算所有插值采样点的所有位置/旋转/比例/ alpha。这里讨论的主题是如何找到动画子片段,以便低于最低片段的所有内容都可以自动缓存到位图中。 –

+0

我开始了解更多。我猜你最好的办法是掀起一个[JSFL脚本](http://help.adobe。com/en_US/flash/cs/extend/flash_cs5_extending.pdf)脚本编写Flash Authoring,以递归方式向下钻取选定的影片剪辑的hirarchy,遍历时间线/帧并检查帧的tweenType属性(例如,如果它的值为'motion'与“形状”或“无”相反)。另外,我想以编程方式从补间动画中提取值,可能会发现[Motion XML结构](http://flashthusiast.com/2008/11/04/understanding-flash-cs4-motion-xml/)有用 –

回答

1

该解决方案非常简单:停止使用Adobe的补间库。

使用​​这是几百倍更快,更容易编码,并有许多其他好处。例如,能够使用isTweening来确定是否某个对象被补间。

这是documentation

要在Flash IDE中包含外部库,您可以通过两种方式来完成。

1)外部库的文件夹复制在你想要把外部库文件在项目文件夹(在您.fla文件)

2)在“文件> ActionScript设置”定义文件夹硬盘。

然后在你的代码中,你只需要导入这些类import。例如:

import com.greensock.TweenLite; 
+0

虽然这将适用于请求,但另一个限制X是这个想法 - 他必须在创作引擎中开发MC,在那里没有TweenLite。 – Vesper

+0

向Flash IDE中制作的项目添加外部库非常容易。你可以为你的AS文件定义一个库路径,或者将AS文件复制到你的项目文件夹中。 – Pier

+0

我的意思是你不能指定一个TweenLite对象来补间MC的部分,只有本地补间,这使得它们不可以通过TweenLite迭代。 – Vesper

相关问题