如何在Flex 3中组合移动和旋转效果?

时间:2010-03-14 12:57:51

标签: flex actionscript-3

我意识到你可以制作一个效果,设置相同的目标,然后点击.play();,但这会产生奇怪的结果(acknowledged by Adobe, fixed in Flex 4)。

我试图让一个物体从屏幕顶部移动到底部,同时它围绕它自己的中心旋转。当独立调用时,这两种效果都可以完美地工作。一起调用时,对象始终围绕左上角旋转。我甚至尝试将它们都放在<Parallel>标签内但没有成功。有没有人想出一个解决方法?

2 个答案:

答案 0 :(得分:1)

我找到了一个权宜之计的解决方案。

问题(在我的OP和对David的评论中提到)是,在旋转效果完成一个完整周期之后,如果它有repeatCount=0无限期地继续,则为originX并且originY值被重置为注册(顶部,左侧)点,这使整个外观摇摆不定。

因此,诀窍是不要让它完成一个完整的旋转周期。如果你有

<mx:Image id="myImage" source="images/someImage.png" />
<mx:Rotate originX="{myImage.width/2}" originY="{myImage.height/2}"
    angleFrom="0" angleTo="360" duration="2000" target="{myImage}" />

...那么您需要做的就是...angleTo="360*100"......duration="2000*100...

通过将angleTo属性设置为非常高的值,它在删除或重新启动之前永远不会完成一个旋转效果,因此不会抛弃originXoriginY ,通过将duration乘以与angleTo相同的因子,您将保持与您希望的相同的旋转速度。

对于大多数人来说,这可能很明显,但对我来说这是一个很大的突破,所以我希望这可以节省一些时间。

答案 1 :(得分:0)

您需要在Parallel实例中包含Move和Rotate,以使它们同时工作。此外,为了使旋转效果围绕组件的中心旋转,您需要将originX和originY属性设置为目标的中心,(originX和originY属性定义旋转中心点。)

以下示例完美无缺:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Image id='effectTarget' source="assets/waterfall.jpg" width="390" height="292" scaleContent="true" autoLoad="true"/>
<mx:Parallel duration="5000" id="effectParallel">
    <mx:Move xFrom="0" xTo="500" yFrom="0" yTo="500" target="{effectTarget}"/>
    <mx:Rotate originX="195" originY="149" angleFrom="0" angleTo="360" target="{effectTarget}"/>
</mx:Parallel>
<mx:Button x="856" y="27" label="Go" click="effectParallel.play()"/>