可以动态的将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;
}
}
| 相关热词搜索 |
