Re: [問題] 讀取 貼圖失敗 要再重新讀取的問題???

看板Flash作者 (呦厚厚)時間15年前 (2010/07/06 14:00), 編輯推噓8(8030)
留言38則, 4人參與, 最新討論串2/3 (看更多)
不好意思 隔這麼久才補程式碼 這不是我實際使用的程式 不過意思差不多就是了 有的時候會全部讀取成功 有時候讀取到 第50多張時 就沒反應了 本來想說 如果是讀取失敗 就再重新讀取一次 但 LoadError 卻都沒有讀取失敗的資訊 想知道怎麼處裡這問題 謝謝了 ^^ public class test extends MovieClip { var num:int=100; // 讀取100次 public function test():void { for( var i:int=0 ; i<100 ; i++ ) // 設定讀取100次 aaa.png 的貼圖 { var _ldr = new Loader(); _ldr.load( new URLRequest( 'aaa.png' ) ); _ldr.contentLoaderInfo.addEventListener( Event.COMPLETE , LoadComplete ); _ldr.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR , LoadError ); _ldr.contentLoaderInfo.addEventListener( SecurityErrorEvent.SECURITY_ERROR , LoadError ); } } private function LoadComplete( evt:Event ):void { num--; trace('OK',num); // 讀取成功顯示OK if( num==0 ) { trace('ALL_OK'); // 全部讀取成功 顯示ALL_OK } } private function LoadError( evt:Event ):void { trace('Error',num); // 讀取失敗顯示 Error } } ※ 引述《yhn0tgb60 (呦厚厚)》之銘言: : 就是阿~~ : 我有一個程式 需要去讀取 外部的許多張貼圖 放到舞台上 : 但有時會發生有1,2張的貼圖 過了很久還是讀不進來 : 我想可能是讀取中間發生什麼問題 : 導致貼圖讀不進來 : 我想說用 IOErrorEvent.IO_ERROR 事件 : 當讀貼圖失敗 就從重新再讀取 : 不過我發現這方法沒用 : 因為貼圖讀不進來 根本不會跳出 IOErrorEvent.IO_ERROR 事件 : 這問題要怎麼解決阿??? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.109.115.30 ※ 編輯: yhn0tgb60 來自: 124.109.115.30 (07/06 14:01)

07/06 14:48, , 1F
for迴圈每次都會檢查條件i有沒有小於num
07/06 14:48, 1F

07/06 14:49, , 2F
但你每次loadComplete都會將num--
07/06 14:49, 2F

07/06 14:50, , 3F
所以跑了i=50之後剛好num也減到剩50 for條件就不成立
07/06 14:50, 3F

07/06 14:52, , 4F
自然跳出迴圈
07/06 14:52, 4F

07/06 14:53, , 5F
IOErrorEvent當然不被觸發 因為程式沒跑完根本不關他事
07/06 14:53, 5F

07/06 14:54, , 6F
你可以另外var一個index去累加計算loadComplete次數
07/06 14:54, 6F

07/06 14:55, , 7F
再去判斷index= =num
07/06 14:55, 7F
※ 編輯: yhn0tgb60 來自: 124.109.115.30 (07/06 15:14)

07/06 15:15, , 8F
我改過了 for() 裡面的 num直接改成 100
07/06 15:15, 8F

07/06 15:15, , 9F
不過還是會有一樣的問題
07/06 15:15, 9F

07/06 15:17, , 10F
而且我印象中~~for迴圈 和 Event.COMPLETE事件 不太容易
07/06 15:17, 10F

07/06 15:17, , 11F
遇到會同步執行的問題 通常Event.COMPLETE 至少會慢一拍
07/06 15:17, 11F

07/06 15:20, , 12F
不過當然 p大說的問題 還是有可能 是必須避免的
07/06 15:20, 12F

07/06 15:20, , 13F
嗯嗯 有一點我不曉得有沒有差 但之前困擾我很久
07/06 15:20, 13F

07/06 15:20, , 14F
之前沒注意到 謝謝了 ^^
07/06 15:20, 14F

07/06 15:20, , 15F
要不要試試看等上一個COMPLETE之後再開始載入下一個?
07/06 15:20, 15F

07/06 15:21, , 16F
_ldr先偵聽再load會比較好 只是建議
07/06 15:21, 16F

07/06 15:22, , 17F
以前我先load再偵聽結果還沒開始偵聽就load完了
07/06 15:22, 17F

07/06 15:22, , 18F
最後就沒有執行到loadComplete
07/06 15:22, 18F

07/06 15:23, , 19F
那時也是CJ大的提醒我才知道 這裡只是分享一下
07/06 15:23, 19F

07/06 15:24, , 20F
回 d大 這方法當然可以 只是...效果上會慢一點...
07/06 15:24, 20F

07/06 15:25, , 21F
所以除非真的沒辦法 才會這樣做
07/06 15:25, 21F

07/06 15:25, , 22F
那把loader用陣列讓他分別load?
07/06 15:25, 22F

07/06 16:04, , 23F
我知道問題了... 因為 ldr 是區域變數
07/06 16:04, 23F

07/06 16:05, , 24F
所以他在 LoadComplete之前 就已經被系統清除了
07/06 16:05, 24F

07/06 16:06, , 25F
變數ldr已經被系統清掉了所以也沒有 LoadComplete這回事
07/06 16:06, 25F

07/06 16:07, , 26F
本來我放區域變數 想說系統會幫我清除 可以節省資源= =
07/06 16:07, 26F

07/06 16:10, , 27F
那怎麼會成功讀到50幾張阿?
07/06 16:10, 27F

07/06 16:11, , 28F
可能系統清除記憶體需要些時間吧 不會即時清除
07/06 16:11, 28F

07/06 16:12, , 29F
而那些是在被清除之前 就跑完的
07/06 16:12, 29F

07/06 16:12, , 30F
我不確定啦 這需要大師來回答 XD
07/06 16:12, 30F

07/06 16:27, , 31F
..大師們快出來XDD
07/06 16:27, 31F

07/06 16:36, , 32F
話說同樣一份code我可以100個全部載入成功
07/06 16:36, 32F

07/06 16:52, , 33F
ㄟ 要多試幾次 有時候會成功 有時候會失敗
07/06 16:52, 33F

07/06 16:58, , 34F
不然就把 100改成1000 或是圖檔找大一點的 這樣失敗的
07/06 16:58, 34F

07/06 16:58, , 35F
機率會大大提升
07/06 16:58, 35F

07/06 17:35, , 36F
你的error message是什麼
07/06 17:35, 36F

07/06 17:36, , 37F
噢,沒事,那個不是error,是error event
07/06 17:36, 37F

07/06 17:39, , 38F
我覺得有可能是記憶體用量過大...
07/06 17:39, 38F
文章代碼(AID): #1CCiQ7a1 (Flash)
文章代碼(AID): #1CCiQ7a1 (Flash)