作者sextitanic (阿信163)
看板Flash
標題Re: [問題] 可以解釋一下這個AS嗎? 感謝
時間Sun Nov 22 12:35:35 2009
※ 引述《godsing (執著是苦)》之銘言:
: var baseurl = _url.substr(0,_url.lastIndexOf("/")+1);
用 _url 指令抓目前 swf 所在路徑
如果放在 C 槽的話就是 file:///C|/bleachfadeloadedimages.swf
再用 substr 從所在路徑的第一個字元開始搜尋,抓到最後一個符合「/」後面的字元+1
然後存到 baseurl 這個變數裡,這個變數就會存:file:///C|/
: var dir = baseurl + "bleachfadeloadedimages";
dir 這個變數就更簡單啦,把 baseurl 跟它自己在外面取的資料夾名合在一起
: var images = ["city","light","cars"];
這個的話就是它那個資料夾裡面照片的名稱,它用陣列存起來的
: playFade = function(){
: this.gotoAndStop(this._currentframe + this.speed);
: }
playFade 是一個 function
這邊指的 this,是它放在場景上的一個影片片段元件
不過由於裡面只放了一個空的影片片段元件,所以畫面上只能看到一個點
該影片片段名產在場景上是叫 fading_symbol
所以那個 gotoAndStop 就是指 fading_symbol 從現在所在的影格開始播
每次播變數 speed 裡面所給的值的影格數
下面會用 onEnterFrame 來執行它,不過卻不會判斷什麼時候終止
這是一點小缺憾(不終止它就會一直不斷的執行,就會影響到效能)
: loadFade = function(){
: var lod = this.fader.contents.getBytesLoaded();
: var tot = this.fader.contents.getBytesTotal();
: if (lod && tot && lod == tot){
: this.speed = -1;
: this.onEnterFrame = playFade;
: }
: }
loadFade 也是一個 function
在主場景上有一個 fading_symbol 影片片段,
fading_symbol 影片片段裡有一個 fader影片片段
fader 影片片段裡面有一個 contents 影片片段
contents 影片片段的功能就是放load進來的照片
在這邊的 this 指的是 fading_symbol 這個影片片段,至於為什麼,下面會再講
所以先用一個 lod 變數去找現在讀了多少,再用一個 tot 來存要讀的照片總共大小
再用 if 判斷 lod 跟 tot 的值是不是一樣,一樣就代表讀完了
(ps:應該只要 lod == tot 即可)
this.speed 是指把 -1 這個值存在 fading_symbol 的 speed 變數裡
(雖然他沒宣告,可是 AS2 允許不宣告變數就直接使用)
最後 onEnterFrame 會不斷的執行playFade(上面所提到的那個 function)
由於 speed 是 -1,所以代表它 gotoAndStop 會不斷的往前一格播
: pressForNext = function(){
: this.speed = 1;
: delete this.onPress;
: }
pressForNext 是一個 function(這個開頭是在賺稿費的嗎 - -)
會把 fading_symbol 裡的 speed 變數值改為 1
這樣子 playFade 這個 function 就會不斷的把它往前播一格
再用 delete 把這個 onPress 給停止掉,這樣子在fadeOut的中途別人就不能按囉
: fading_symbol.onFadeOut = function(){
: this.speed = 0;
: this.fader.contents.loadMovie(dir + "/" + images[0] + ".jpg");
: images.push(images.shift());
: this.onEnterFrame = loadFade;
: }
在 fading_symbol 這個影片片段最後一格,有呼叫 onFadeOut這個 function
所以這邊才是用該影片片段名稱+function名稱
若這邊不加 function 名稱,則該影片片段裡面就要用 _parent.onFadeOut 來呼叫
離題了,轉回來
由於此 function 是在 fading_symbol 建立(雖然寫在主場景,但前面有元件名稱)
所以裡面的 this 統統都是指主場景上的 fading_symbol 影片片段
爾後由它所呼叫的 function,也都是繼承它,所以之前提到的 this 才是指 fading_symbol
所以就去 load 照片,而照片的路徑就是之前用變數抓的路徑 dir
再加上上面 images 陣列最前面的那個內容
然後再用 images.shift() 把陣列最前面的內容刪掉,再用 push 指令把它加到最後面
所以第一次點,images[0]裡面的 city 會被刪掉
其它往前遞補,再把 city 給 push 到 images[2]
然後再用 onEnterFrame 不斷的執行 loadFade
(可是這個不斷執行,playFade也不斷執行,這樣不會有問題嗎?)
嗯,一個元件一次只能用一個 onEnterFrame,所以後來再用一個,前面的就會自動取消
: fading_symbol.onFadeIn = function(){
: this.speed = 0;
: this.onPress = pressForNext;
: }
: fading_symbol.gotoAndStop(fading_symbol._totalframes); // straight to
: onFade
這個則是在 fading_symbol 的第一格影片中呼叫的
然後它會讓 fading_symbol 這個點了之後會叫 pressFonNext 這個 function
上面那個 function 點了之後就會用 delete 把這個監聽給取消
等下次元件 fadeIn 到第 1 格之後
再呼叫此 function 讓程式去監聽 fading_symbol 有沒有被按下
那個 fading_symbol.gotoAndStop(fading_symbol._totalframes);
則是讓 fading_symbol 這個元件先跳到最後一格,做出 fadeIn 的效果
咦?那fadein 的效果是怎麼做的呢?程式中看不到~
很簡單,你點開 fading_symbol 這個影片片段,就會看到有一段漸變
再點一下 fading_symbol 裡面的 fader 影片片段,按屬性面板
就會看到有一個顏色旁邊的下拉方塊是進階,它就是在裡面設定 RGB 漸變
這樣子就會有效果出現了
: 以上是在神魂顛倒論壇看到的
: 主題:[FLA]秀圖的方法之一
: 本文章來自於神魂顛倒論壇 http://bbs.flash2u.com.tw/dispbbs_37_84729_1_17.html
: 我不解
: 1.為啥它按一下就會換圖?
因為有 onPress 指令可以偵測該元件有沒有被按到,再執行相關程式
: 2.為啥它在讀圖檔的資料庫要寫這麼多步驟?
它沒讀資料庫,只是單純用陣列來控制
為什麼這麼多步驟?因為要指定什麼時候 fadeIn,什麼時候 fadeOut
什麼時候讀哪一張照片之類
: 3.圖檔可以縮放嗎?(以像素)
縮放可以,只要在load完照片之後,改變 load 它的影片片段大小即可
我不確定你的像素是什麼意思
: 4.speed是什麼指令?
不是指令,只是它設定在fading_symbol影片片段中的一個沒宣告的變數
: 感謝解惑!
感謝讓我寫文章賺P幣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.174.46
→ sextitanic:如果只是想使用這個程式的話,只要注意第2、3行程式 11/22 12:45
推 aquarianboy:熱心推一個 11/22 12:49
→ aquarianboy:希望這個不是拿去交作業,不然就是幫(害)到原po了...:) 11/22 12:50
→ sextitanic:現在害一個,以後就少一個競爭對手!?(誤) 11/22 12:53
推 godsing:不是作業 = = 現在在服替代役,沒事情做..... 11/22 13:09
→ sextitanic:我剛退伍,待業中,也是沒事做,唉 :( 11/22 13:26
→ aquarianboy:如果沒事情做的話,建議找EAS3來慢慢翻,建立基礎吧 11/22 21:41