![](/img/trans.png)
[英]Flash ActionScript 3 Code error: Error #1009: Cannot access a property or method of a null object reference
[英]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.