文由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