flash学习笔记:模仿QQ振动效果(转载夏天的树)

    技术2022-05-20  38

    package com.pgworld.util { import flash.events.TimerEvent; import flash.geom.Point; import flash.utils.Dictionary; import flash.utils.Timer; /** * @author xxz */ public class ShakeEffect { private var timer : Timer; private var deley : Number; private var startX : Number; private var startY : Number; private var para : Number; // 震动的参数 private var m_contain : Dictionary; private var currentID : String; private var pointArray : Array = []; private var n : int = 0; public static var CIRCLE : String = "circle"; // 基于圆形 public static var RANDOM : String = "random"; // 基于随机 private var type : String; public function ShakeEffect(deley : Number = 100, para : Number = 5, type : String = "circle", points : int = 18) { m_contain = new Dictionary(true); this.deley = deley; this.para = para; timer = new Timer(deley); timer.addEventListener(TimerEvent.TIMER, onTimer); this.type = type; if (type == "circle") { // 用于震动的点记录 for (var i : int = 0; i < points; i++) { var point : Point = new Point(); point.x = para * Math.cos(-i * 360 / points * Math.PI / 180); point.y = para * Math.sin(-i * 360 / points * Math.PI / 180); pointArray.push(point); } } // trace(pointArray); } /* 添加列表 * @ para id 需要震动的名称 * @ para obj 需要震动的对象 * */ public function addList(id : String, obj : *) : void { m_contain[id] = obj; } private function onTimer(event : TimerEvent) : void { if (n < pointArray.length - 1) { n++; } else { n = 0; } moveBy(); } public function start(id : String) : void { if (timer.running) { return; } startX = getObject(id).x; startY = getObject(id).y; currentID = id; n = 0; timer.start(); } private function getObject(id : String) : * { return m_contain[id]; } // 停止震动 public function stop() : void { timer.stop(); getObject(currentID).x = startX; getObject(currentID).y = startY; } // 关闭时间器 public function destory() : void { timer.removeEventListener(TimerEvent.TIMER, onTimer); } public function reStart() : void { timer = new Timer(deley); timer.addEventListener(TimerEvent.TIMER, onTimer); } // 震动效果 private function moveBy() : void { if (type == "circle") { getObject(currentID).x = startX + pointArray[n].x; getObject(currentID).y = startY + pointArray[n].y; } else { getObject(currentID).x = startX + Math.random() * para; getObject(currentID).y = startY + Math.random() * para; } } } }

    测试类: shake=new ShakeEffect(); var sp:Sprite = new Sprite(); sp.name="sp"; sp.addEventListener(MouseEvent.MOUSE_OVER,onOver); sp.addEventListener(MouseEvent.MOUSE_OUT,onOut); sp.graphics.beginFill(0xffeedd); sp.graphics.drawCircle(100, 100, 50); sp.graphics.endFill(); this.addChild(sp); var btn:Button = new Button(); btn.name="Button"; btn.label="单击"; btn.addEventListener(MouseEvent.CLICK, listener); btn.addEventListener(MouseEvent.MOUSE_OVER,onOver); btn.addEventListener(MouseEvent.MOUSE_OUT,onOut); this.addChild(btn); shake.addList(btn.name,btn); shake.addList(sp.name,sp); } private var shake:ShakeEffect; private function onOver(event : MouseEvent) : void { shake.start(event.currentTarget.name); } private function onOut(event : MouseEvent) : void { shake.stop(); }


    最新回复(0)