打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
AS3实现的弹性按钮效果——修订版(原创)
AS3实现的弹性按钮效果——修订版(原创)
第一次面试失败后回来写的这个程序,因为这个问题被多次提到,贴出来和大家分享。
首先还是直接贴代码吧,两个文件,一个Rect.as,代码如下:
  1. package {
  2.         import flash.display.Sprite;
  3.         import flash.events.MouseEvent;
  4.         import flash.events.Event;
  5.        
  6.         public class Rect extends Sprite {
  7.                 public var border:Number;
  8.                 private var color:uint;
  9.                 private var big:Number = 1.5;//最大放大倍数
  10.                 private var small:Number = 1;//原态
  11.                 private var spring:Number = .4;//弹性系数
  12.                 private var resistance:Number = .9;//阻力
  13.                 private var vX:Number;//X速度
  14.                 private var vY:Number;//Y速度
  15.                 private var multiple:Number;
  16.                
  17.                 public function Rect(a:Number = 40, c:uint = 0xff0000) {
  18.                         border = a;
  19.                         color = c;
  20.                         draw();
  21.                         vX = 0;
  22.                         vY = 0;
  23.                         this.addEventListener(MouseEvent.MOUSE_OVER, onOver);
  24.                         this.addEventListener(MouseEvent.MOUSE_OUT, onOut);
  25.                 }
  26.                 private function draw():void {
  27.                         graphics.lineStyle(1);
  28.                         graphics.beginFill(color);
  29.                         graphics.drawRect(-border / 2, -border / 2, border, border);
  30.                         graphics.endFill();
  31.                 }
  32.                 private function onOver(evt:MouseEvent):void {
  33.                         parent.setChildIndex(this, this.parent.numChildren-1);//置于顶层
  34.                         multiple = big;//鼠标进入时,将平衡位置设置为big
  35.                         addEventListener(Event.ENTER_FRAME, onEnterFrame);
  36.                 }
  37.                 private function onOut(evt:MouseEvent):void {
  38.                         parent.setChildIndex(this, 0);//置于底层
  39.                         multiple = small;//鼠标离开时,平衡位置为原态
  40.                         addEventListener(Event.ENTER_FRAME, onEnterFrame);
  41.                 }
  42.                 private function onEnterFrame(evt:Event):void {
  43.                         var dx:Number = multiple - this.scaleX;//相当于弹簧的伸长距离了
  44.                         if(Math.abs(dx) < 0.005 && vX < .005) {//改进了判定条件->伸长距离为0且速度为0
  45.                                 removeEventListener(Event.ENTER_FRAME, onEnterFrame);//停止弹性
  46.                         } else {
  47.                                 var ax:Number = dx * spring;//加速度->与伸长距离和弹性系数成正比
  48.                                 vX += ax;//速度:vt=v0+at
  49.                                 vX *= resistance;//阻力效果,不然弹性不会停止
  50.                                 this.scaleX += vX;
  51.                                 this.scaleY = this.scaleX;
  52.                         }
  53.                 }
  54.         }
  55. }
复制代码
另一个是文档类了,在这里看效果,Spring2.as代码如下:
  1. package {
  2. import flash.display.Sprite;
  3. public class Spring2 extends Sprite {
  4. private var n:int = 3;
  5. public function Spring2() {
  6. for(var i:int = 0; i < n; i++) {
  7. var rect:Rect = new Rect(40);
  8. rect.x = 100 + 50*i;
  9. rect.y = 100;
  10. addChild(rect);
  11. }
  12. }
  13. }
  14. }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Flash基础理论课 第八章 缓动与弹性运动Ⅰ
as3菜单
动量守恒与能量守恒
flex 画连接线条
流媒体及FLV播放器相关知识点 - flash - zhangzhichao198
Flash as3 一种减速运动的算法(有惯性的小球)用作惯性菜单
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服