我意识到你可以制作一个效果,设置相同的目标,然后点击.play();
,但这会产生奇怪的结果(acknowledged by Adobe, fixed in Flex 4)。
我试图让一个物体从屏幕顶部移动到底部,同时它围绕它自己的中心旋转。当独立调用时,这两种效果都可以完美地工作。一起调用时,对象始终围绕左上角旋转。我甚至尝试将它们都放在<Parallel>
标签内但没有成功。有没有人想出一个解决方法?
答案 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
属性设置为非常高的值,它在删除或重新启动之前永远不会完成一个旋转效果,因此不会抛弃originX
和originY
,通过将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()"/>