簡體   English   中英

Flash錯誤#1009:無法訪問空對象引用的屬性或方法…?

[英]Flash Error #1009: Cannot access a property or method of a null object reference …?

創建帶有Flash as3的菜單時出現問題。 你們能幫我做什么...? 像這樣 :

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

請幫助我,謝謝大家...

您的問題是空指針異常
這意味着您正在嘗試訪問空對象內的變量。

您提供的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( 空指針異常 )。


編輯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);
}

解決方法是將閃存更改為另一種版本。 我嘗試了一下,問題就消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM