当你用千奇百怪的方式中断了一个变形变化(tweened motion),那么在消除干扰,继续其后续的变化方面可能会有点棘手。在这个例子里我们将展示如何获得来自复杂变化(multiple tweens)平滑而又合理的回馈。点击这里在新窗口查看效果。
源文件下载
变化的控制机理
请看包里tweencotrol.fla文件里的时间轴代码注释,了解它是如何通过调节卡片运动和卡片对鼠标反应之间的关系来管理复杂变化的。基本构思如下:
• 当一个变化需要被中止的时候,必须要用到Tween.stop()方法。
• 否则,事件TweenEvent.MOTION_CHANGE 和TweenEvent.MOTION_FINISH会不断触发,甚至在你的tween变量被赋予了新值之后也是如此。
• 在停止变化后根除所有变化事件的监听器。否则在变化过去之后监听器都会一直逗留,可能会出问题。
• 把变化的属性值储存在某个变量里以供延续平滑变化之用。
透明对象将保持对鼠标动作的反应
范例里还有一个技巧会让你觉得很有用——那就是创建一个透明对象不可见的同时保持对鼠标的敏感。上边一行的卡片响应ROLL_OVER 和ROLL_OUT事件。为了让ROLL_OUT事件既不因卡片旋转也不因鼠标移走而执行。我们把前边的两张卡放进相应尺寸的Sprite容器里,我们在那些容器里画了透明背景。这样,容器就能反应鼠标动作而且透明如昔。对ROLL_OVER and ROLL_OUT的监听器附着在容器上而不是卡上。因此,除非用户把鼠标从卡片的区域移走,ROLL_OUT事件将不会触发。
名为CardRotator的AS3定制类
在我们的示例里,我们使用了可以进行深度排列以及翻转舞台上的任意卡片的定制CardRotator类,这个类还可以进行任意透视和投影设置。这个类并不是用在解决变化控制问题上的,它只是刚刚好给了一个好看的例子而已。这个CardRotator类已经在我们的教程Z-Sorting of a 3D Card and the Projection Center in Flash CS4.里介绍和讨论过了。
3D对象的模糊特效
你可能会注意到3D卡片的边缘比储存在Library里的对应2D卡片要少了些”锋芒”。那要归功于有名的3D对象模糊特效。这个特效可以用来做很多文章,最近我们就将提交一个有清晰边缘3D对象的新版本CardRotator类。这个版本将以我们这个教程介绍的技术为基础:Simple and Sleek Solution to Blurring of 3D Objects in Flash Player 10.