看下面的代码:
var clip:MovieClip = this.createEmptyMovieClip(
"clip", this.getNextHighestDepth( ));
clip._alpha = 0;
for(var i = 1; i <= 100; i++){
clip._alpha++;
trace(i+"% = " + clip._alpha + "% alpha");
}
在输出面板的最后几行如下:
95% = 74.21875% alpha
96% = 75% alpha
97% = 75.78125% alpha
98% = 76.5625% alpha
99% = 77.34375% alpha
100% = 78.125% alpha
你会发现最后clip._alpha = 78.125而不是100,没想到吧会产生这样大的误差。那么误差到底是在哪一步
产生的呢?下面具体分析以下:
当i=1时
clip._alpha = 1,1% * 256 = 2.56 因为只能取整数所以实际值是2;
当i=2时
clip._alpha = clip._alpha + 1,在上一次循环后clip._alpha 转化为0-255之间的数值是2,将其转化
到%数即为 2/256*100% = 0.78125% 。所以clip._alpha = 0.78125 + 1 ;
剩下的你自己可以计算,会发现和输出面板里的数值一致。
那么在做和透明度有关的动画时怎样避免这种误差呢?如果你真正懂得了上面的解说的话相信
你会有自己的好办法。下面是其中的一种,可以参考:
//注:假设clip为舞台上的一电影剪辑
clip._alpha = 0;
fader(clip, 0, 100);
function fader(mc, startAlpha, endAlpha) {
mc.fade1 = startAlpha;
mc.fade2 = endAlpha;
mc.onEnterFrame = fade;
}
function fade( ) {
this._alpha = this.fade1++;
if (this.fade1 >= this.fade2) {
this._alpha = this.fade2;
delete this.fade1;
delete this.fade2;
delete this.onEnterFrame;
}
}