2013-05-21 115 views
1

我使用flash as3創建菜單時出現問題。你們能幫助我應該怎麼做...?就像這樣:Flash錯誤#1009:無法訪問空對象引用....的屬性或方法?

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
at DocumentClass/menuScreen() 
at DocumentClass/mouseBack() 

如何正確的代碼來解決代碼如下:

package { 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.display.SimpleButton; 
import flash.events.MouseEvent; 
import flash.system.fscommand; 
import flash.display.StageDisplayState; 

public class DocumentClass extends MovieClip { 
public var backbutton:BackButton = new BackButton(); 
    public function DocumentClass() { 
     menuScreen(); 
     stage.addEventListener(Event.ENTER_FRAME, masukGame); 

    } 
    public function masukGame(e:Event):void{ 
     stage.displayState = StageDisplayState.FULL_SCREEN; 
    } 
    public function menuScreen():void{ 

     game.menuscreen.mb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick1); 
     game.menuscreen.pb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick2); 
     game.menuscreen.mlb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick3); 
     game.menuscreen.kb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick4); 


    } 
    public function backMenu():void{ 

     backbutton.buttonMode = true; 
     backbutton.addEventListener(MouseEvent.MOUSE_DOWN, mouseBack); 
     backbutton.x = 450; 
     backbutton.y = 400; 
     // Dan akhirnya letakan button ke stage; 
     addChild(backbutton); 
     backbutton.visible=true; 

    } 

    public function mouseClick1(event:MouseEvent):void { 
     game.gotoAndStop("MainGame"); 
     backMenu(); 


    } 
    public function mouseClick2(event:MouseEvent):void { 
     game.gotoAndStop("Petunjuk"); 
     backMenu(); 
    } 
    public function mouseClick3(event:MouseEvent):void { 
     game.gotoAndStop("Malaria"); 
     backMenu(); 
    } 
    public function mouseClick4(event:MouseEvent):void { 
     game.gotoAndStop("Keluar"); 
     backMenu(); 
    } 
    public function mouseBack(event:MouseEvent):void { 

     menuScreen(); 


    } 


    } 
} 

這是我的文件,在這裏下載:https://www.dropbox.com/s/jo7bcwnlfj7qjnh/My%20Game.rar

請幫助我,感謝傢伙..

回答

1

你的問題是空指針異常
這意味着你正試圖訪問一個空對象內的變量。

您提供的StackTrace指導我們解決問題。
跟蹤中的最後一個地方是:

DocumentClass/menuScreen() 

所以,你的問題是DocumentClass類的menuScreen()內。

public function menuScreen():void 
{ 
    game.menuscreen.mb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick1); 
    game.menuscreen.pb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick2); 
    game.menuscreen.mlb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick3); 
    game.menuscreen.kb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick4); 
} 

在這裏,我們試圖訪問:

  • game
  • game.menuscreen
  • game.menuscreen.mb
  • game.menuscreen.pb
  • game.menuscreen.mlb
  • game.menuscreen.kb

其中之一爲空。


編輯1

好吧,我想你的代碼的.fla並發現問題是game.menuscreen電話。
一旦你改變你的屏幕,你從舞臺上刪除menuscreen

當您回到並嘗試訪問它時,它不再存在,因此,您將得到一個NPE(空指針異常)。


EDIT 2

你可以用不同的方法,但最簡單的(和最靈活的)解決問題是一個參考存到自己menuscreen的地方,你可以得到它後者。

例如:你可以把它放在DocumentClass類是這樣的:

public class DocumentClass extends MovieClip 
{ 
    public var backbutton:BackButton = new BackButton(); 
    public var gameMenuScreen:MovieClip; 

    public function DocumentClass() 
    { 
     gameMenuScreen = game.menuscreen; 
     menuScreen(); 
     stage.addEventListener(Event.ENTER_FRAME, masukGame); 
    } 

    // ... rest of the class 
} 

然後你可以從DocumentClass直接訪問它,像這樣:

public function menuScreen():void 
{ 
    // It was "game.menuscreen" 
    // Now it is "gameMenuScreen" 

    gameMenuScreen.mb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick1); 
    gameMenuScreen.pb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick2); 
    gameMenuScreen.mlb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick3); 
    gameMenuScreen.kb.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick4); 
} 
+0

你能展示我必須做的代碼或解決方案嗎?因爲我是新的蜜蜂......對於Flash ......請謝謝...... –

0

的解決方案是閃光燈改變的版本另一種。我試了一下,問題就消失了。

相關問題