2013-11-01 113 views
0

Main.asAS3錯誤1009:無法訪問空對象引用的屬性或方法

package{ 
import flash.display.MovieClip; 
import flash.events.*; 

public class Main extends MovieClip { 
    public var _root:MovieClip; 

    public var monsterContainer:MovieClip = new MovieClip(); 


    public var delay = 30; 

    public function Main(){ 
     addEventListener(Event.ADDED, beginClass); 
     addEventListener(Event.ENTER_FRAME, enterFrameEvents); 
    } 

    function beginClass(e):void{ 
     _root = MovieClip(root); 
    } 

    function enterFrameEvents(e):void{ 

     addChild(monsterContainer); 
     delay -= 1; 
     if(delay <= 0){ 
      var spawn:Slime = new Slime(); 
      spawn.x = startPoint.x; 
      spawn.y = startPoint.y; 
      monsterContainer.addChild(spawn); 
      delay = 30; 
     } 

    } 
} 

Arrow.as

package{ 
import flash.display.MovieClip; 
import flash.events.*; 

public class Arrow extends MovieClip { 
    public var _root:MovieClip; 

    public var facingID; 

    public function Arrow(){ 
     addEventListener(Event.ADDED, beginClass); 
     addEventListener(Event.ENTER_FRAME, enterFrameEvents); 
    } 

    function beginClass(e):void{ 
     _root = MovieClip(root); 
    } 

    function enterFrameEvents(e):void{ 

     trace(_root.monsterContainer == null); 

    } 
} 

,並在輸出它的出現是這樣的:

false 
false 
false 
false 
false 
TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at Arrow/enterFrameEvents() 
TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at Arrow/enterFrameEvents() 

起初它說false是因爲trace(_root.monsterContainer == null),但它突然說錯誤1009,當我用ctrl + shift + ent呃,它指向trace(_root.monsterContainer == null);

我是2天試TIS,請大家幫忙

的其他代碼:(它實際上可能不相關)

Enemy.as

package{ 
import flash.display.MovieClip; 
import flash.events.*; 

public class Enemy extends MovieClip { 
    public var _root:MovieClip; 

    //Status 
    public var monsterSpeed; 
    public var facing = "Right"; 

    //CallingArrow 
    public var down:Down = new Down(); 

    public function Enemy(){ 
     addEventListener(Event.ADDED, beginClass); 
     addEventListener(Event.ENTER_FRAME, enterFrameEvents); 
    } 

    function beginClass(e):void{ 
     _root = MovieClip(root); 
    } 

    function enterFrameEvents(e):void{ 

     //Facing Movement 
     if(_root.pausing == false){ 
      if(facing == "Right"){ 
       this.x += monsterSpeed; 
      }else if(facing == "Left"){ 
       this.x -= monsterSpeed; 
      }else if(facing == "Down"){ 
       this.y += monsterSpeed; 
      }else if(facing == "Up"){ 
       this.y -= monsterSpeed; 
      } 
     } 


    } 
} 

Down.as

package { 
import flash.display.MovieClip; 
import flash.events.*; 


public class Down extends Arrow { 

    public function Down(){ 

     facingID = "Down"; 
    } 
} 

Slime.as

package { 
import flash.display.MovieClip; 
import flash.events.*; 


public class Slime extends Enemy { 

    public function Slime(){ 

     monsterSpeed = 5; 

    } 
} 

並且時間線上沒有額外的代碼stop();

如果u需要的文件(CS6):http://www.mediafire.com/download/hz5tptkgftwdipw/Tower_Defense.rar

+0

它看起來像_root變成空。如果monsterContainer爲null,它不會拋出錯誤,您只會得到一個true的痕跡。 – Marcela

+0

是的,它應該只是追溯到真實,但是爲什麼突然出現1009錯誤,那麼這是如此的煩人,任何想法? –

+0

我懷疑你沒有在這裏顯示完整的代碼。你是否刪除箭頭實例?你甚至在哪裏實例化它?它在任何地方都是不可見的... – Fygo

回答

0

它改成這樣:

public function Arrow(){ 
    addEventListener(Event.ADDED, beginClass); 
} 

function beginClass(e):void{ 
    _root = MovieClip(root); 
    addEventListener(Event.ENTER_FRAME, enterFrameEvents); 
} 

在你的代碼_rootNULL,因爲你的對象不能被添加到舞臺在同一幀中如此

function enterFrameEvents(e):void{ 

    trace(_root.monsterContainer == null); 

} 

會嘗試訪問monsterContainer屬性NULL對象。因此,好老#1009

+0

顯然同樣適用於其他類適用,即:敵人 –

+0

完美謝謝! –

相關問題