網域查詢: www.
返回首頁
當前位置: 首頁 > 站長學院 > 平面設計 > Flash >

Flash MX 編程深層次應用-高級特效(5)

時間:2010-02-12 02:12來源: 作者: 點擊:
3.3 虛幻特效(1) 在 Flash MX 特效中,虛幻的影像、復雜的粒子系統、激情的火焰、跳動的波浪都屬于一種虛幻的內容。一般來說,在矢量動畫中是很難制作出這種效果的,但是 Flash MX 編程
  
3.3 虛幻特效(1)

    

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的地方疊加時,在疊加位置的透明度就變成了6n個透明疊加之後其相應位置透明效果就為3×n。由于區域是隨機的,因此疊加的地方也是隨機的。不但出來的效果隨機了,而且畫面還會有一種漸變的層次感,從而產生了超酷的效果!說句實在話,自己都不相信這麼短的一段代碼可以產生出這麼酷的效果。效果如圖3-12與圖3-13所示。

      

3-12                                      3-13

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


頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
最新評論 查看所有評論
發表評論 查看所有評論
請自覺遵守互聯網相關的政策法規,嚴禁發佈色情、暴力、反動的言論。
評價:
表情:
用戶名: 密碼: 驗證碼:
推薦內容