2015-09-24 45 views
0

我試圖創建一個菜單,在單擊button時調用另一個swf文件。 然而,消息返回IS-加載程序在as3中返回一個空對象

TypeError: Error #1009: Cannot access a property or method of a null object reference. at GameController()

GameController()上面給出的是文檔類的所謂"HotAirRises.swf"

的代碼下面給出:

package { 

import flash.display.MovieClip; 
import fl.controls.Button; 
import flash.events.MouseEvent; 
import flash.display.Loader; 
import flash.net.URLRequest; 
import flash.events.Event; 

public class MainController extends MovieClip { 


    public function MainController() 
    { 
     tester.addEventListener(MouseEvent.CLICK, testIt); 
     // constructor code 
    } 
    private function testIt(e:MouseEvent) 
    { 
     trace("testing"); 
     var myLoader:Loader = new Loader();      
     var url:URLRequest = new URLRequest("HotAirRises.swf"); 
     trace(myLoader,url); 
     myLoader.load(url,null); 
     addChild(myLoader); 
    } 
} 

} 

我失去的是什麼?與其他HotAirRises.swf文件有關嗎? 請幫忙!

+1

加載程序是異步的。你需要添加一個eventlistener(EVENT.COMPLETE)到Loader。 – DodgerThud

+0

AFAIK'trace'語句不支持逗號分隔值。如果你想附加多個值,你需要使用'+'運算符。你可以嘗試評論一下「trace」嗎? –

+2

trace支持逗號分隔值。添加Event.COMPLETE監聽器不是必需的。最後問題是'測試者'不被識別並且爲空。 – BotMaster

回答

1

我的推測是GameController在HotAirRises.swf訪問stage屬性(可能根據舞臺尺寸定位顯示對象)。 問題是swf正在加載,所以最初的stage屬性將爲空。

你可以嘗試添加裝載機直線距離,裝貨前:

var myLoader:Loader = addChild(new Loader()) as Loader; 

(你就不需要addChild(myLoader);)加載後,但這可能無法正常工作。

爲了100%確定您會得到預期的行爲(並且作爲最佳實踐),請在ADDED_TO_STAGE事件處理程序上初始化您的GameController。

如果你的代碼可能是這樣的:

GameController(){//constructor 
    init(); 
} 

private function init():void{ 
    //initalise Game Controller code 
} 

它應該是這樣的:

GameController(){//constructor 
    addEventListener(Event.ADDED_TO_STAGE, init); 
} 
private void init():void{ 
//stage should not be null here, carry on initialising 
} 

看一看this article爲好。

+0

哇!有效。感謝Greg。你的帖子非常有見地。 – NitinDixit

+0

誰是格雷格! :P感謝您的投票,但:) –

+0

道歉,喬治。 – NitinDixit