2014-02-24 35 views
0

我正在研究AS3中的jumpnrun遊戲。一段時間以來,我的球員角色(我的「頭像」)有一個問題。在測試Flash動畫時,在10-8的情況下,我在遊戲開始時發現運行時錯誤(#1009空對象引用),我不明白。問題在於遊戲無法播放,因爲未將頭像剪輯添加到舞臺,並且會爲每個輸入的幀生成錯誤消息。有什麼令人困惑的是,每時每刻都工作正常,當我從flashdevelop內執行調試選項打開時,錯誤甚至不會發生...添加動畫片段時不經常出現空對象引用錯誤

關於我的頭像類:它是一個SWF文件我動態加載到程序中。它包含幾個標記的幀,其中包含靜態圖形符號或動畫片段動畫符號(如步行和跳躍等)。同樣在這些紅色單標記幀的每一箇中,我都有一個填充的矩形,用於碰撞處理。

現在的事情是根據閃存調試器的問題與每個幀中的碰撞盒有關:當錯誤發生閃光說它是空的(雖然它在那裏(在FLA))和頭像贏得'顯示出來...正如我所說的,奇怪的是,有時它顯然不是空的,遊戲正常運行。 此外,我發現代碼必須認爲頭像的時間軸上的第一個幀標籤存在兩次,因爲通過this.totalFrames的迭代返回第一幀的名稱兩次。

是否有可能發生奇怪的事情,程序試圖去一個不存在的框架,因此沒有一個collbox?我不明白這一點。我真的希望任何人都能從中理解。我只想知道如何擺脫這個空引用錯誤。任何幫助,將不勝感激!

這是我在調試模式下輸出:

Attempting to launch and connect to Player using URL C:\...\game\Main.swf 
[SWF] C:\...\game\Main.swf - 1244185 bytes after decompression 
[SWF] C:\...\game\Avatar.swf - 20657 bytes after decompression 
[SWF] C:\...\game\LevelOne.swf - 72447 bytes after decompression 
[UnloadSWF] C:\...\game\Avatar.swf 
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich. 
    at Avatar/updatePosition() 
    at Avatar/eFrame() 

編輯:

對不起,我沒有早些回來。我的代碼:

public function Avatar():void 
{ 
this.x = 100; 
this.y = 750; 

this.gotoAndStop(0); 

var i:int; 
var obj:DisplayObject; 
for (i = 0; i < this.numChildren; i++) 
{ 
    obj = this.getChildAt(i); 
    if (obj is AvatarCollbox) 
    { 
    obj.visible = false; 
    } 
} 

this.gotoAndStop("avatarIdle"); 
addEventListener(Event.ENTER_FRAME, eFrame); 
} 

function eFrame(e:Event):void 
{ 
updatePosition(); 
} 

function updatePosition():void 
{ 
    var mcCollbox:DisplayObject; 

    for (var i:int = 0; i < this.numChildren; i++) 
    { 
    var obj:DisplayObject = this.getChildAt(i); 
    if (obj is AvatarCollbox) 
    { 
    mcCollbox = obj; 
    break; 
    } 
    } 

var collisionTolerance:int = 5; 

// this line causes the error: mcCollbox is said to be null (which can't be since 
// I put the collbox-mc in EVERY frame of Avatar.swf's timeline...) 
var rectBoundsAvatar:Rectangle = mcCollbox.getBounds(mcCollbox); 

var iAvatarOldLeft:int  = iOldPositionX + rectBoundsAvatar.left + collisionTolerance; 
var iAvatarOldRight:int  = iOldPositionX + rectBoundsAvatar.right - collisionTolerance; 
var iAvatarOldTop:int  = iOldPositionY + rectBoundsAvatar.top + collisionTolerance; 
var iAvatarOldBottom:int = iOldPositionY + rectBoundsAvatar.bottom - collisionTolerance; 

var iAvatarNewLeft:int  = iNewPositionX + rectBoundsAvatar.left; 
var iAvatarNewRight:int  = iNewPositionX + rectBoundsAvatar.right; 
var iAvatarNewTop:int  = iNewPositionY + rectBoundsAvatar.top; 
var iAvatarNewBottom:int = iNewPositionY + rectBoundsAvatar.bottom; 
} 
+0

您認爲顯示拋出錯誤的代碼可能有用嗎?你有沒有嘗試在IF語句中包裝有問題的代碼,所以它不會嘗試使用null對象?這很可能是因爲對象不在舞臺上或其他一些常見場景,所以您看到的是預期的行爲。 –

+0

添加了代碼。我嘗試了if語句,但它沒有改變。我不確定代碼是否真的是這裏的問題,因爲有時程序執行完美並且完全可以玩。但大多數時候它會拋出錯誤。我注意到的另一件事:通常mcAvatar有3個孩子(如果程序實際上工作正確追蹤)。但是:在另一種情況下,沒有孩子,mcAvatar不會被添加到舞臺上,我得到的錯誤。這很奇怪,因爲swf的所有幀都被正確設置了......這就是爲什麼我想知道閃存文件是否可能被搞亂。 – user1502804

回答

0

我們需要看你的代碼。

您使用的是loaderOfYuurAvantarSWFFile.addEventListener(Event.COMPLETE,init); ??

您是否使用try-catch?

+0

我正在使用一個加載器頭像類yep。在swf完全加載之前,玩家角色不會被添加到舞臺上。 try-catch我沒有用過,我不知道如何不幸。 – user1502804