利用MovieClip对象的rotationY属性实现翻转动画效果
最近用AS3代码实现了一套动画效果,做个记录备忘。需求
实现模拟洗牌、翻扑克牌的效果。总共有4种牌,牌的数量不固定,每次操作把牌都背扣在桌面,模拟洗牌。洗牌结束后,用户用鼠标点击一张牌后,播放翻牌的动画(以牌的Y轴为轴旋转),显示牌的内容(这个过程需要和服务器通信得到牌的种类)。
2:点击牌后启动一个timer,这个timer已经监听了TimerEvent.TIMER事件,每次计时完成都会执行一个方法FlipFun,在FlipFun中做这样的事情:
(1)rotationY自增1;
(2)判断rotationY大于90度后(此时牌和屏幕是垂直状态),通过gotoAndStop方法控制MC播放的帧数实现显示牌的正面;如果rotationY等于180度,此时牌已经完全翻转过来,正面面向屏幕,这时停止计时,善后。
3:扣牌动画类似2的操作。
2:MC的透视属性问题。需要修改默认属性,否则所有的3D属性操作其投影中心(消失点)都在舞台中央,如果MC恰巧(其实是一定)不在舞台的中央,透视效果都会和预期的出现偏差。这里是这样设置MC的透视属性的:
翻转动画实现过程
1:制作牌的MovieClip资源。将每种牌的正面和背面图片做成这个MC的1-5帧。2:点击牌后启动一个timer,这个timer已经监听了TimerEvent.TIMER事件,每次计时完成都会执行一个方法FlipFun,在FlipFun中做这样的事情:
(1)rotationY自增1;
(2)判断rotationY大于90度后(此时牌和屏幕是垂直状态),通过gotoAndStop方法控制MC播放的帧数实现显示牌的正面;如果rotationY等于180度,此时牌已经完全翻转过来,正面面向屏幕,这时停止计时,善后。
3:扣牌动画类似2的操作。
遇到的问题
1:MC的对齐点的问题。需要改到牌的x坐标中央(修改这个同时也要修改牌的位置摆放代码)。2:MC的透视属性问题。需要修改默认属性,否则所有的3D属性操作其投影中心(消失点)都在舞台中央,如果MC恰巧(其实是一定)不在舞台的中央,透视效果都会和预期的出现偏差。这里是这样设置MC的透视属性的:
var perspective:PerspectiveProjection =
this.transform.perspectiveProjection ? this.transform.perspectiveProjection : new PerspectiveProjection();
// 这句设置其投影中心为牌的正中央(由于MC对齐点的问题,x坐标就是牌的x坐标中央)
perspective.projectionCenter = new Point(((this.x)), ((this.y+this.height)/2));
this.transform.perspectiveProjection = perspective;
注:this即MC
参考资源:
http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/geom/PerspectiveProjection.html
http://bbs.9ria.com/forum.php?mod=viewthread&tid=120073&page=1#pid1188198