天天看點

flash平滑滾動原理及執行個體

文由FK授權藍色理想轉載

[url=http://www.flashk.org/]

[color="#444444"]通路FK[/color]

[/url]

|

[url=http://www.blueidea.com/articleimg/2004/03/1715/sscrollMC.fla]

[color="#444444"]下載下傳源檔案[/color]

[/url]

(129K)

ShowS 平滑上下滾動條(版權規flashk.org所有):

[1b]技術資料[/1b]:

[1b]如何使用[/1b]:

電影剪輯scrollMC的onLoad事件:

 showHeight = 350;

 myHeight = 350;

 speed = 13;

 targetMovie = "show.testMC";

showHeight用來指定綁定的MC的顯示高度,myHeight指定滾動條本身的高度。speed是滑動的速度,其值越大,滑動越慢。targetMovie指定綁定的MC的路徑(相對)。

[1b]技術内幕[/1b]:

主要的ActionScript集中在一個空的電影剪輯中:onClipEvent (enterFrame) {

    mcMoved();

}

onClipEvent (load) {

    a = eval("_parent._parent."+_parent.targetMovie);

    function mcMoved() {

        whereY = -(a._height-_parent.showHeight)*(_parent.dragMC._y/(_parent.myHeight-38));

        var tempK = whereY-a._y;

        if (Math.abs(tempK)>1) {

            a._y += tempK/_parent.speed;

            nowY = _parent.dragMC._y;

        }

    }

}

[1b]a = eval("_parent._parent."+_parent.targetMovie); [/1b]用來将指定綁定的MC位置。以後就可以使用a._x、a._alpha來通路這個電影剪輯了,與此相類似的技術還有_parent["myMC"]。

[1b]whereY = -(a._height-_parent.showHeight)*(_parent.dragMC._y/(_parent.myHeight-38));[/1b]主要用來計算綁定的MC應該滾動到的位置。

var tempK = whereY-a._y;

if (Math.abs(tempK)>1) {

    a._y += tempK/_parent.speed;

    nowY = _parent.dragMC._y;

}

這個比較重要,直接關系到對CPU的占用率。首先,if (Math.abs(tempK)>1)判斷目前要滾動到的位置是否離目前位置有一個像素的內插補點。Math.abs()是計算絕對值的函數。如果不是,即已經滾動到了應該到達的位置,則不進行幀的重繪。(Flash繪制一個幀的圖像要耗相當的CPU,事實上,CPU的大部份使用都花在顯示上面。AS的執行隻要很少的CPU,是以,進行必要的判斷,去掉不必要的重新繪制。可以有效地降低CPU的使用率。至少在滑鼠沒有重新進行互動時可以很好地降低CPU的使用率)。如果其值大于1,則将綁定的MC位置重新計算。

[1b]a._y += tempK/_parent.speed;[/1b]是一個很經常用的滑動公式,其實真正的公式是這樣的:[1b]

[color="#ff0000"]a._y += (whereY-a._y)/_parent.speed[/color]

[/1b] 這裡隻是在上一步進行了簡化。

function goArea(a) {

        dragMC._y = (showHeight-38)*a;

}

函數對應三個按鈕“滾動到1/3、滾動到1/2、滾動到2/3、”其原理想想應該不難明白。

本站相關文章: 

[url=http://www.blueidea.com/tech/multimedia/2003/1299.asp]

[color="#444444"]運動緩沖效果解晰[/color]

[/url]

本文轉自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/1061.html

繼續閱讀