最近阿被淪落到得要自己負責網站的Flash, 只因團隊裡的設計總監有更重要的任務要做, 不過就在"學習"一段現成的FLASH動畫效果的script時, 發現動畫執行一段時間後, 就會出現這樣的訊息:
影片中有一個Script會讓Flash Player的速度變慢, 如果繼續執行它, 電腦可能會停止回應, 是否要中止這個Script?
如果停止之後, 當然動畫效果就沒了, 如果沒有選停止, 那真的會覺得電腦跟著變慢了, 好像停頓了下了, 而且每次都讓來訪者看到這個訊息更顯得很不專業!
稍微查了查網路, 雖然也有人出現同樣的錯誤訊息, 不過並沒有提到可能的原因或是修正的方式!
這個FLASH的原始來源原本運作的挺好的, 可是經過阿被改寫之後, 就不行了! 但是我還是很懷疑問提出在自己身上, 照著實驗方式重新驗證, 發現原來的FLASH是用Flash 6跟ActionScript 1.0發佈的, 但是我為了配合Flash CS3的特效, 就使用了FLASH 8發佈, 竟然改了版本就不行了!
不過至少是找到原因了, 還好可以肯定不是阿共的陰謀! :D
稍早前也遇過舊版的Flash 移植到新版後就完全看不到動畫的情形, 不過像這樣看得到特效但卻會發生這種錯誤訊息倒還是第一次遇到。雖然改回Flash 6就可以正常, 好像也不會影響系統速度, 但是心理還是覺得毛毛的, 隱約會覺得會變慢(應該是心理因素 = =), 加上會影響Flash CS3的特效使用, 還是想找出原因!
雖然對ActionScript還不熟, 不過偵錯向來是阿被自認還算擅長的把戲, 花了點時間又啟動了偵錯過程, 發現原來錯誤發生在這樣的段落:
function changeTxt() {
loadText(num);
if (num<=copyText.length) {
num++;
} else {
num = 1;
}
}
紅色的那一行, 在執行了數次之後, 會因為 num 超過了該有的數字而在執行 loadText(num) 的時候讀取了根本不存在的值, 出現數值 undefined 的錯誤, 在出限這個錯誤的時候, Flash Player會先停頓了一下, 緊跟著就出現了上面的警告訊息!
不過詭異的是, 雖然在Flash 6也會出現同樣的undefined錯誤, 但是Flash Player卻好像當作沒看到, 在錯誤之後仍繼續進行動畫, 而且在num重設為1之後, 又繼續重複執行, 就算在遇到下次錯誤也照樣不會影響!
不過這種錯誤在找到原因後也就不難改正, 把 loadText(num)放進底下的if判斷裡頭就好了!
改成:
function changeTxt() {
if (num<=copyText.length) {
loadText(num);
num++;
} else {
num = 1;
}
}
改完後以Flash 8發佈也就正常了!
網路上其他人出現的狀況未必是相同情形, 不過應該可以確定, 如果發生這種錯誤訊息, 應該是在ActionScript上確實有錯誤存在!