作者yhn0tgb60 (呦厚厚)
看板Flash
標題Re: [問題] 讀取 貼圖失敗 要再重新讀取的問題???
時間Tue Jul 6 14:00:37 2010
不好意思 隔這麼久才補程式碼
這不是我實際使用的程式 不過意思差不多就是了
有的時候會全部讀取成功
有時候讀取到 第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)
1F:→ pepsitetsu:for迴圈每次都會檢查條件i有沒有小於num 07/06 14:48
2F:→ pepsitetsu:但你每次loadComplete都會將num-- 07/06 14:49
3F:→ pepsitetsu:所以跑了i=50之後剛好num也減到剩50 for條件就不成立 07/06 14:50
4F:→ pepsitetsu:自然跳出迴圈 07/06 14:52
5F:→ pepsitetsu:IOErrorEvent當然不被觸發 因為程式沒跑完根本不關他事 07/06 14:53
6F:→ pepsitetsu:你可以另外var一個index去累加計算loadComplete次數 07/06 14:54
7F:→ pepsitetsu:再去判斷index= =num 07/06 14:55
※ 編輯: yhn0tgb60 來自: 124.109.115.30 (07/06 15:14)
8F:→ yhn0tgb60:我改過了 for() 裡面的 num直接改成 100 07/06 15:15
9F:→ yhn0tgb60:不過還是會有一樣的問題 07/06 15:15
10F:→ yhn0tgb60:而且我印象中~~for迴圈 和 Event.COMPLETE事件 不太容易 07/06 15:17
11F:→ yhn0tgb60:遇到會同步執行的問題 通常Event.COMPLETE 至少會慢一拍 07/06 15:17
12F:→ yhn0tgb60:不過當然 p大說的問題 還是有可能 是必須避免的 07/06 15:20
13F:推 pepsitetsu:嗯嗯 有一點我不曉得有沒有差 但之前困擾我很久 07/06 15:20
14F:→ yhn0tgb60:之前沒注意到 謝謝了 ^^ 07/06 15:20
15F:推 dsmwang:要不要試試看等上一個COMPLETE之後再開始載入下一個? 07/06 15:20
16F:→ pepsitetsu:_ldr先偵聽再load會比較好 只是建議 07/06 15:21
17F:→ pepsitetsu:以前我先load再偵聽結果還沒開始偵聽就load完了 07/06 15:22
18F:→ pepsitetsu:最後就沒有執行到loadComplete 07/06 15:22
19F:→ pepsitetsu:那時也是CJ大的提醒我才知道 這裡只是分享一下 07/06 15:23
20F:→ yhn0tgb60:回 d大 這方法當然可以 只是...效果上會慢一點... 07/06 15:24
21F:→ yhn0tgb60:所以除非真的沒辦法 才會這樣做 07/06 15:25
22F:推 dsmwang:那把loader用陣列讓他分別load? 07/06 15:25
23F:→ yhn0tgb60:我知道問題了... 因為 ldr 是區域變數 07/06 16:04
24F:→ yhn0tgb60:所以他在 LoadComplete之前 就已經被系統清除了 07/06 16:05
25F:→ yhn0tgb60:變數ldr已經被系統清掉了所以也沒有 LoadComplete這回事 07/06 16:06
26F:→ yhn0tgb60:本來我放區域變數 想說系統會幫我清除 可以節省資源= = 07/06 16:07
27F:推 dsmwang:那怎麼會成功讀到50幾張阿? 07/06 16:10
28F:→ yhn0tgb60:可能系統清除記憶體需要些時間吧 不會即時清除 07/06 16:11
29F:→ yhn0tgb60:而那些是在被清除之前 就跑完的 07/06 16:12
30F:→ yhn0tgb60:我不確定啦 這需要大師來回答 XD 07/06 16:12
31F:推 dsmwang:..大師們快出來XDD 07/06 16:27
32F:推 cjcat2266:話說同樣一份code我可以100個全部載入成功 07/06 16:36
33F:→ yhn0tgb60:ㄟ 要多試幾次 有時候會成功 有時候會失敗 07/06 16:52
34F:→ yhn0tgb60:不然就把 100改成1000 或是圖檔找大一點的 這樣失敗的 07/06 16:58
35F:→ yhn0tgb60:機率會大大提升 07/06 16:58
36F:推 cjcat2266:你的error message是什麼 07/06 17:35
37F:→ cjcat2266:噢,沒事,那個不是error,是error event 07/06 17:36
38F:推 cjcat2266:我覺得有可能是記憶體用量過大... 07/06 17:39