|
源代码网推荐
可以动态的将MC的颜色从一个颜色过度到另一个颜色,可能有写地方还不是最优的方式,如果有人找到更好的方式不要忘记告诉我哦:)
/* * @class com.wersling.types.colorMC * @author Wersling * @version 1.0 * @description 扩张Color方法,修改MC颜色 * @usage var x = new colorMC(mc); * x.setChangeRGB(0xffcc00, 10, 0); * ----------------------------------------------- * Latest update: 2005-4-21 * ----------------------------------------------- * * ----------------------------------------------- * Functions: * colorMC(mc) * 1. setRGB(RGB) * 2. setChangeRGB(RGB, step_int, Nom) * 3. changeColor(newCol , delCol) * 4. getColArray(RGB) * -------------------------------------------------- */ import com.wersling.utils.Delegate; import com.wersling.events.EventDispatcher; // class com.wersling.types.colorMC extends MovieClip { private var _intervalID : Number; private var _MC : MovieClip; private var _col : Color; private var nowCol : Array; private var _step_int : Number ; private var _currentStep_int:Boolean; //同步冲突 private var _Nom : Number = 0; //返回的参数,用来判断执行的步骤. // private var dispatchEvent : Function; public var addEventListener : Function; public var removeEventListener : Function; // // 构造函数 // public function colorMC (mc : MovieClip) { EventDispatcher.initialize (this); _MC = mc; _col = new Color (_MC); } /** *============================================= * 函数:setRGB (RGB : Number) * 参数:1.RGB :十六位颜色值; * 说明:设置mc颜色 * ============================================= * */ public function setRGB (RGB : Number) { if ( ! isNaN (RGB) || RGB < 0xFFFFFF || RGB > 0) { _col.
setRGB (RGB); } } /** *============================================= * 函数:setChangeRGB (RGB : Number, step_int : Number, Nom : Number) * 参数:1.RGB :新的颜色值; * 2.step_int :操作步骤; * 3.Nom :可选,触发监听的一个值; * 说明:将MC的颜色渐变到另一个颜色。 * ============================================= * */ public function setChangeRGB (RGB : Number, step_int : Number, Nom : Number) { if (_currentStep_int) { clearInterval (_intervalID); } delete nowCol; _currentStep_int = true; if ( ! isNaN (Nom)) { _Nom = Nom; } if ( ! isNaN (RGB) || RGB < 0xFFFFFF || RGB > 0) { if (step_int == undefined || step_int <= 0) { var step_int = 10; } var newCol = new Array; newCol = getColArray (RGB); // nowCol = new Array; var _l = _col.getRGB ().toString (16); _l = nowCol = getColArray (parseInt ("0x" + _l, 16)); // var delCol = new Array; delCol
[0] = (newCol [0] - nowCol [0]) / step_int; delCol [1] = (newCol [1] - nowCol [1]) / step_int; delCol [2] = (newCol [2] - nowCol [2]) / step_int; // _step_int = step_int; _intervalID = setInterval (Delegate.create (this, changeColor) , 40, newCol, delCol); } } /** *============================================= * 函数:changeColor(newCol : Array, delCol : Array) * 参数:1.newCol :新的颜色值; * 2.delCol :每次增加的颜色值; * 说明:无 * ============================================= * */ private function changeColor (newCol : Array, delCol : Array) { _step_int --; for (var i = 0 ; i < 3 ; i ++) { nowCol [i] += delCol [i] } var _R = nowCol [0].toString (16); if (_R.length == 1) { _R = "0" + _R; } var _G = nowCol [1].toString (16); if (_G.length == 1) { _G = "0" + _G; } var _B = nowCol [2].toString (16); if (_B.length == 1) { _B = "0" + _B; } var color_num = parseInt ("0x" + _R + _G + _B, 16); //合并数据,转为颜色值 _col.setRGB (color_num); if (_step_int <= 0) { clearInterval (_intervalID); _currentStep_int = false; dispatchEvent ( { type : "CMCcomplete", Nom : _Nom }); } } /** *============================================= * 函数:getColArray (RGB : Number) * 参数:1.RGB :十六位颜色值; * 说明:将一个RGB分别存放在一个数组中 * ============================================= * */ private function getColArray (RGB : Number) : Array { var _A = new Array; _A [0] = Math.floor (RGB / 65536); _A [1] = Math.floor (RGB % 65536 / 256); _A [2] = RGB % 256; return _A; } }
源代码网供稿. |