2010-06-01 74 views
0

我已經通過多個線程瞭解了此錯誤,但尚未能夠將其應用於計算我的情況...Flash按鈕不起作用:TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法

我的Flash文件是一個約5秒的動畫。然後,每個圖層的最後一個關鍵幀(第133幀)中都有一個按鈕。我的Flash文件應該停留在最後一個關鍵幀上,並且您應該能夠點擊6個按鈕中的任意一個以導航到我網站中的另一個html頁面。

這裏是我已經應用於其中的按鈕存在(在一個單獨的層中的幀的動作腳本,見截圖於:http://www.footprintsfamilyphoto.com/wp-content/themes/Footprints/images/flash_buttonissue.jpg

stop(); 


function babieschildren(event:MouseEvent):void 
{ 
    trace("babies children method was called!!!"); 
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/babies-children"); 
    navigateToURL(targetURL, "_self"); 
} 

bc_btn1.addEventListener(MouseEvent.CLICK, babieschildren); 
bc_btn2.addEventListener(MouseEvent.CLICK, babieschildren); 


function fams(event:MouseEvent):void 
{ 
    trace("families method was called!!!"); 
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/families"); 
    navigateToURL(targetURL, "_self"); 
} 

f_btn1.addEventListener(MouseEvent.CLICK, fams); 
f_btn2.addEventListener(MouseEvent.CLICK, fams); 


function couplesweddings(event:MouseEvent):void 
{ 
    trace("couples weddings method was called!!!"); 
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/couples-weddings"); 
    navigateToURL(targetURL, "_self"); 
} 

cw_btn1.addEventListener(MouseEvent.CLICK, couplesweddings); 
cw_btn2.addEventListener(MouseEvent.CLICK, couplesweddings); 

當我測試影片,我得到此錯誤輸出框:「TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法」。

測試影片停止在適當的框架上,但按鈕不執行任何操作(無URL打開,並且當測試影片上的按鈕被點擊時,跟蹤語句不會顯示在輸出框中)

你可以在這裏查看.swf文件:www.footprintsfamilyphoto.com/portfolio

我相信,所有的6個按鈕都在適當的幀(幀133)的存在,所以我不認爲這是什麼導致1009錯誤。

我也嘗試每次刪除三個函數/ addEventListener節中的每一節並進行測試,並且我仍然每次都得到1009錯誤。如果我刪除除「stop()」行之外的所有操作腳本,那麼我不會收到1009錯誤。

任何想法??我對Flash很新,所以如果我沒有澄清我需要的東西,請告訴我!


更新:我得到這個事做與我的文件的建設,而不是代碼本身的感覺 - 如果任何人有更多截圖/信息的建議,我可以在這裏包括可能有助於揭示任何構造上的缺陷,讓我知道,我會很高興捕獲/發佈它們。我只是不確定要作爲Error 1009的來源尋找什麼?我已經確認並重新確認了我的實例名稱......所有按鈕都存在於動作腳本所在的同一幀中(第133幀)。我不進口任何外部物體...

任何建議將不勝感激!

回答

0

我使用CS3重建樣本,至少對我來說它按預期工作 和你的代碼看起來是正確的以及.. 我能想象到的唯一的事情就是 沒有一個實例名稱(如「bc_btn1 「) 在您的時間軸上的每個KEYFRAME上。

在這種情況下,我得到了同樣的錯誤.. 所以也許你應該檢查。

關於

0

非常感謝您的回覆!如果我有CS3的副本,考慮到CS4給我的頭痛,我會非常樂意回覆!

我最終將我的文件發送給朋友/閃存大師直接修復。在這裏粘貼他的迴應,以防其他人有幫助!老實說,我有點驚訝它正在爲你做這件事,尤其是因爲我可以在沒有任何問題的情況下從Flash創作環境運行程序 - 只有當你真正從外部啓動swf纔會發生問題。

你肯定是在正確的軌道上檢查這些按鈕的實例。看起來好像是因爲按鈕被添加到該框架中,幾乎在框架腳本應該運行的同時,它僅僅是按順序排列。所以它試圖在程序知道它們存在之前在按鈕上調用addEventListener。

我不能說我的解決方案是否是正確的,但它應該工作並且相對較快。當程序到達該框架時,我正在檢查以確保每個按鈕都存在。我把這個檢查放在一個由ENTER_FRAME事件調用的函數中,只要程序正在運行(這與我們調用的stop()命令無關),該函數將以程序的幀速率持續發生。只要檢查通過,意味着沒有任何按鈕爲空,我爲所有按鈕添加事件偵聽器,並刪除ENTER_FRAME的偵聽器,以便此檢查器方法停止運行。

下面是我現在用於該框架的代碼。看看這是否有幫助 - 現在它適用於我。現在我將不得不詳細閱讀這些內容,以瞭解處理此問題的推薦技術。

import flash.events.Event; 

stop(); 

//listen for the Flash player's ENTER_FRAME event... 
this.addEventListener(Event.ENTER_FRAME, onEnterFrame, false); 

//and call this checker function continually until all of the buttons are accounted for 
function onEnterFrame(e:Event):void { 
if (bc_btn1 != null && bc_btn2 != null && f_btn1 != null && f_btn2 != null && cw_btn1 != null && cw_btn2 != null){ 
    bc_btn1.addEventListener(MouseEvent.CLICK, babieschildren); 
    bc_btn2.addEventListener(MouseEvent.CLICK, babieschildren); 

    f_btn1.addEventListener(MouseEvent.CLICK, fams); 
    f_btn2.addEventListener(MouseEvent.CLICK, fams); 

    cw_btn1.addEventListener(MouseEvent.CLICK, couplesweddings); 
    cw_btn2.addEventListener(MouseEvent.CLICK, couplesweddings); 

    //clean up the enter frame listener so that this function no longer gets called 
    this.removeEventListener(Event.ENTER_FRAME, onEnterFrame, false); 
} 
} 



function babieschildren(event:MouseEvent):void 
{ 
    trace("babies children method was called!!!"); 
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/babies-children"); 
    navigateToURL(targetURL, "_self"); 
} 


function fams(event:MouseEvent):void 
{ 
    trace("families method was called!!!"); 
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/families"); 
    navigateToURL(targetURL, "_self"); 
} 


function couplesweddings(event:MouseEvent):void 
{ 
    trace("couples weddings method was called!!!"); 
    var targetURL:URLRequest = new URLRequest("http://www.footprintsfamilyphoto.com/portfolio/couples-weddings"); 
    navigateToURL(targetURL, "_self"); 
} 
2

我有完全相同的錯誤,我在這裏讀一些有關SWF沒有趕上按鈕實例上時,即使是在同一框架上,它是exaclty這一點。

我只是擴大了按鈕1幀之前的動作和工作!

相關問題