在Flash MX特效中,虛幻的影像、復雜的粒子系統、激情的火焰、跳動的波浪都屬于一種虛幻的內容。一般來說,在矢量動畫中是很難制作出這種效果的,但是Flash MX編程在繪圖方面的加強,使這些效果的實現成為可能,下面將介紹兩個這方面的例子。在Flash MX中仍然沒有增加對3D的支持,所以對3D物體的操作只能靠程序來完成,在第三個實例中講述了一個3D物體旋轉的應用,它對廣大程序員來說是一個極好的範例。
3.3.1 虛幻實境
現在介紹一個程序技巧要求不高,但卻要求編程人員有非凡想像力的特效 虛擬實境。這個特效原理非常簡單,首先產生出一批用來控制的點,然後用這些點畫出一個封閉的區域,然後以隨機色、透明度為3的方式進行填充。在產生一批這樣的區域後,將這些區域隨機放置、疊加,就創造出一個真實而又虛幻的特效。請看下面的代碼︰
//在低分辨率下運算會快些,才能產生出朦朧美
_quality = "LOW";
//產生8個用來控制的點
for (i=1; i<=8; i++) {
_root.createEmptyMovieClip("point"+i, i+10);
_root["point"+i]._x = Stage.width/2;
_root["point"+i]._y = Stage.height/2;
//控制點的位置在正負5個點之內變化
_root["point"+i].xVel = Math.floor(Math.random()*10)-5;
_root["point"+i].yVel = Math.floor(Math.random()*10)-5;
_root["point"+i].onEnterFrame = function() {
this._x += this.xVel;
this._y += this.yVel;
//這兩句保證控制點在超出視野時就要回頭反向移動
this._x<0 || this._x>Stage.width ? this.xVel *= -1 : this.xVel;
this._y<0 || this._y>Stage.height ? this.yVel *= -1 : this.yVel;
};
}
//定義隨機顏色
values = new Array("0", "2", "4", "6", "8", "A", "C", "D");
_root.hexColor="0x"+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)];
//產生變形
i = 1;
_root.onEnterFrame = function() {
name = "dongua_shape_"+i;
_root.createEmptyMovieClip(name, i+20);
_root[name].beginFill(_root.hexColor, 3);
_root[name].moveTo(_root.point1._x, _root.point1._y);
_root[name].curveTo(_root.point2._x,_root.point2._y, _root.point3._x, _root.point3._y);
_root[name].curveTo(_root.point4._x,_root.point4._y, _root.point5._x, _root.point5._y);
_root[name].curveTo(_root.point6._x,_root.point6._y, _root.point7._x, _root.point7._y);
_root[name].curveTo(_root.point8._x,_root.point8._y, _root.point1._x, _root.point1._y);
_root[name].endFill();
//移去以前的區域,僅保留最新的50個區域
removeMovieClip(_root["dongua_shape_"+(i-50)]);
i++;
};
這個特效最核心的地方就是每個獨立區域的透明度不高,但是當兩個透明度為3的地方疊加時,在疊加位置的透明度就變成了6,n個透明疊加之後其相應位置透明效果就為3×n。由于區域是隨機的,因此疊加的地方也是隨機的。不但出來的效果隨機了,而且畫面還會有一種漸變的層次感,從而產生了超酷的效果!說句實在話,自己都不相信這麼短的一段代碼可以產生出這麼酷的效果。效果如圖3-12與圖3-13所示。

圖3-12 圖3-13
在制作這個效果初期,先是將這些區域放在一個MC中,然後做了一個定時器,當時間一到就讓這個MC的透明度降低直至為0,然後再重新開始新的效果。但是實際演示時,發現這種透明度漸變效果根本不連續,甚至連顏色看上去都有點變化,無法達到理想的效果。解決此問題時可以采用前面特效用到的把不同的區域放到不同的MC的辦法,然後不斷產生出新的區域,又同時消除以前的區域,保證在畫面上只有固定個數的填充區域,一運行,效果非常理想。通過這個例子可以說明一個道理,就是編程在很多地方是相通的,在這個地方用到的思路也可以在另一個地方用到,由于核心思想不同,出來的效果也就不相同了。

