Re: [問題] 多個影片片段之播放與暫停

看板Flash作者 (moonet)時間16年前 (2009/12/10 17:25), 編輯推噓11(11033)
留言44則, 7人參與, 最新討論串3/4 (看更多)
※ 引述《sextitanic (阿信163)》之銘言: : ※ 引述《tira0419 (提拉)》之銘言: : : 恕刪一點原文 : : 我需要做一個播放與暫停鈕,能停止動畫播放,卻又在暫停的地方開始播放。 : : 我試了很久,一開始發現STOP跟PLAY只能控制最上層的時間軸,無法暫停影片片段裡的 : : 播放。所以後來又開始把第一層的每個影片片段設一個實體名稱,然後再用程式碼去暫 : : 停這些影片片段的播放。(感覺很土法煉鋼...) : : 程式碼如下:(假設10個影片片段的實體名稱是aaa bbb ccc ddd eee .........) : : on (release) { : : aaa.stop(); : : bbb.stop(); : : ccc.stop(); : : ddd.stop(); : : eee.stop(); : : fff.stop(); : : ggg.stop(); : : hhh.stop(); : : iii.stop(); : : sss.stop(); : : } : 其實如果是命名成 a1、a2、a3....a11 : 那可以寫成 : for(var i=1; i<=11; i++){ : this["a" + i].stop(); : } : : (恕再刪一點原文)我必須每個 : : 都設實體名稱,再設定相對應的程式碼。這樣搞下去程式碼就一長串比鄉民的30cm還 : : 長了... : : 然後...我總共有60個flash要改,每個都有一模一樣的情況.....= =" : : 所以來請教各位大大...有沒有程式碼可以一次控制這麼多層的影片片段 : : 設定我按下暫停鈕,這些動畫就全部暫停 : : 按下播放鈕,就從我剛剛暫停的那個畫面開始播放? : : 懇求各位大大幫忙了>"< : 如果不想要每一個都設名字的話,倒可以用另一個方法 : typeof : 嗯.....就是偵測場景上的元件是什麼類型 : 如果是 movieclip 就停止 : 大概範例如下: : for(var i in _root){ //迴圈,會跑在 _root 裡面的所有物件,指定給 i : if(typeof(this[i])=="movieclip"){ // movieclip 就是影片片段 : this[i].stop(); //先把第一層的停下來 : for(var j in this[i]){ //再來就是停 i 影片片段裡面的囉 : if(typeof(this[i][j]) == "movieclip"){ : this[i][j].stop(); : } : } : } : } : 嗯......這個應該是 ok 的,寫的還挺醜的啊 XD 寫成遞迴 就能支援到所有層級 function stopMC(MC) { MC.stop(); for(var i in MC) if(typeof(MC[i]) == "movieclip") stopMC(MC[i]); } 不過其實等到復原的時候就出包了,因為 function playMC(MC) { MC.play(); for(var i in MC) if(typeof(MC[i]) == "movieclip") playMC(MC[i]); } 當初停止全部的MC之前,也許只有少數幾個MC會動 但是復原時卻是所有MC都在動阿~~~(無解) 有辦法判斷出某個MC是否正在play嗎? ==嘗試修改推文中提到的問題 function stopMC(MC) { for(var i in MC) if(typeof(MC[i]) == "movieclip") stopMC(MC[i]); //備份資料 MC.onEnterFrameBackup = MC.onEnterFrame; MC._currentFrameBackup = MC._currentFrame; MC.onEnterFrame = function() { //判斷這MC本身會不會動 if(this._currentFrame == this._currentFrameBackup) this.stopByFunction = false; else this.stopByFunction = true; //馬上停掉 this.onEnterFrame = null; MC.stop(); } //MC.stop(); 放這裡就錯了 } function playMC(MC) { for(var i in MC) if(typeof(MC[i]) == "movieclip") playMC(MC[i]); MC.onEnterFrame = MC.onEnterFrameBackup; if(MC.stopByFunction) MC.play(); } 測試檔案:用滑鼠左鍵點到球 球就會停下或繼續跑 http://cgm.cs.ntust.edu.tw/etrex/stopPlay/stopPlay.html http://cgm.cs.ntust.edu.tw/etrex/stopPlay/stopPlay.fla 有組件也ok的版本: http://cgm.cs.ntust.edu.tw/etrex/stopPlay/stopPlay2.html http://cgm.cs.ntust.edu.tw/etrex/stopPlay/stopPlay2.fla -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.9.202

12/10 17:30, , 1F
給他一個stopByFunction的Boolean ?
12/10 17:30, 1F

12/10 17:31, , 2F
紀錄是不是因為這個function停下來的
12/10 17:31, 2F

12/10 17:37, , 3F
對 問題是不知道怎樣判斷他原本有沒有在動
12/10 17:37, 3F

12/10 17:45, , 4F
喔喔 對耶...= =
12/10 17:45, 4F

12/10 17:47, , 5F
我是都抓currentFrame==1或totalFrames,不是就當在動XD
12/10 17:47, 5F

12/10 17:48, , 6F
我想的是另外寫一個onEnterFrame 去看兩個時間點的
12/10 17:48, 6F

12/10 17:49, , 7F
currentFrame 是否相同 不過太冗長 不想寫
12/10 17:49, 7F

12/10 17:49, , 8F
如果元件本身會輪播,我會在裡面下gotoAndPlay("loop")
12/10 17:49, 8F

12/10 17:49, , 9F
不過話說回來這樣只能停住影格 不能停住onEnterFrame
12/10 17:49, 9F

12/10 17:50, , 10F
作出的動畫
12/10 17:50, 10F

12/10 17:50, , 11F
避掉currentframe==1或是totalFrames的誤判
12/10 17:50, 11F
※ 編輯: etrexetrex 來自: 140.118.9.202 (12/10 18:04)

12/10 19:46, , 12F
兩位大大的討論好熱烈啊...而且確實點出我今天早上測試
12/10 19:46, 12F

12/10 19:47, , 13F
時所延伸出來的問題,就是停止可以同時停止,但是一播就
12/10 19:47, 13F

12/10 19:48, , 14F
大家一起來...
12/10 19:48, 14F

12/10 20:39, , 15F
我在 #172GgoE6 有提到怎麼判斷是否一個MC在播放 :)
12/10 20:39, 15F

12/10 20:59, , 16F
有神!快拜(舉香)
12/10 20:59, 16F

12/10 21:08, , 17F
發現bug !! 我改一下 0.0
12/10 21:08, 17F
※ 編輯: etrexetrex 來自: 118.168.163.148 (12/10 21:09)

12/10 21:16, , 18F
使用方法: stopMC(_root);
12/10 21:16, 18F

12/10 21:17, , 19F
使用方法: playMC(_root);
12/10 21:17, 19F

12/10 21:20, , 20F
(筆記中)
12/10 21:20, 20F

12/10 21:26, , 21F
大大,我成功了@@,超酷的!!!真的是全部都停止,而且播
12/10 21:26, 21F

12/10 21:27, , 22F
放的時候又不會全部一起動~該動的會動,不該動的都很乖@@
12/10 21:27, 22F

12/10 21:28, , 23F
12/10 21:28, 23F

12/10 21:29, , 24F
真是難得一見的 熱烈+happy ending 的討論呀 ^^
12/10 21:29, 24F

12/10 21:35, , 25F
剛剛還苦惱到頭有點暈,結果拿舊檔案出來改,一成功整個
12/10 21:35, 25F

12/10 21:35, , 26F
人都清醒了起來XD
12/10 21:35, 26F

12/10 21:43, , 27F
XD 我在作測試檔案 竟然遇到一個問題
12/10 21:43, 27F

12/10 21:43, , 28F
畫面上有組件就會出bug
12/10 21:43, 28F

12/10 21:44, , 29F
怪了...我這邊相當正常耶@@"
12/10 21:44, 29F

12/10 21:47, , 30F
真可怕 組件只要出現在元件庫 就會掛點了
12/10 21:47, 30F
※ 編輯: etrexetrex 來自: 118.168.163.148 (12/10 21:52)

12/10 21:53, , 31F
新增了測試檔案
12/10 21:53, 31F

12/10 21:53, , 32F
誰要來避免一下組件的bug XDDD
12/10 21:53, 32F

12/10 21:55, , 33F
對了 這個測試檔案只有一層 所以遞迴的部分測不到
12/10 21:55, 33F

12/10 21:55, , 34F
所以是我的fla裡面根本沒有組件所以才沒事摟@.@"
12/10 21:55, 34F

12/10 21:56, , 35F
12/10 21:56, 35F

12/10 22:00, , 36F
這又更深奧了...(遠目)
12/10 22:00, 36F

12/10 22:07, , 37F
如果有辦法知道某個MC是否為組件 就能除去問題
12/10 22:07, 37F

12/10 22:16, , 38F
if (mc is fl.core.UIComponent) trace("component");
12/10 22:16, 38F

12/10 22:16, , 39F
這是AS3的判斷法,AS2的我記得寫法一樣
12/10 22:16, 39F

12/10 22:20, , 40F
好像不能
12/10 22:20, 40F

12/10 22:32, , 41F
if (mc instanceof mx.core.UIComponent) 這樣可以
12/10 22:32, 41F
※ 編輯: etrexetrex 來自: 118.168.163.148 (12/10 22:35)

12/11 11:45, , 42F
建議版主收錄精華區@.@"
12/11 11:45, 42F

12/11 11:52, , 43F
其實是有收了 :)
12/11 11:52, 43F

12/13 13:41, , 44F
拜一下好文!
12/13 13:41, 44F
文章代碼(AID): #1B8BwLpJ (Flash)
討論串 (同標題文章)
文章代碼(AID): #1B8BwLpJ (Flash)