2011-12-01 124 views
0

我一直在碰到一個我正在做的遊戲的碰撞代碼的一些奇怪的問題,我已經能夠追查到這一點:我的屬性的getters返回NaN,而不是一個實際的數字。吸氣劑返回NaN

這裏有屬性的聲明,在類的頂部:

private var _top:Number; 
private var _bottom:Number; 
private var _left:Number; 
private var _right:Number; 

,這裏是在干將:通過調用的公共函數setSides(tileSize:Number)成爲產生

public function get top():Number 
{ 
    return _top; 
} 

public function get bottom():Number 
{ 
    return _bottom; 
} 

public function get left():Number 
{ 
    return _left; 
} 

public function get right():Number 
{ 
    return _right; 
} 

值一個類實例(值取決於tileSize參數)。運行完後,我運行一個trace來獲取使用getters的值,但是它們都返回NaN。

問題是,如果我在setSides()範圍內運行類似的跟蹤,而不使用getters(即直接使用變量),它們會返回正確的值。 爲了確定,我也在使用獲取者的函數中做了它,所以我確定它們是問題所在。

任何人都知道發生了什麼事?

編輯:這是我的setSides()功能:

public function setSides(tileSize:Number):void 
{ 
    var _top:Number = Math.floor(_yPos/tileSize); 
    var _bottom:Number = Math.floor((_yPos + 45)/tileSize); 
    var _left:Number = Math.floor(_xPos/tileSize); 
    var _right:Number = Math.floor((_xPos + 20)/tileSize); 

    trace("top: " + top + " bottom: " + top + " left: " + left + " right: " + right); //This gives the correct values, not NaN 
} 

但即使有什麼問題我的價值觀,我分配(這將顯示在我的跟蹤),我分配的值爲0給我的構造函數中的每個變量,所以他們不應該在我的類實例化的那一刻給NaN。

編輯:哦,男人,我現在才注意到這一點。由於我做了一些測試和重新編輯,我仍然在使用我的變量,就好像我正在定義它們一樣(使用var:Number)。此外,「給他們分配0」也在我提到的這個測試和重新編輯之前,所以不存在。

+2

這些吸氣劑看起來不錯。請在不使用getter的情況下發布'setSides'的代碼和獲取正確值的地方。可能是價值觀在其他地方發生了變化。 – taskinoor

+1

默認情況下,它們是NaN。只有看到如何設置值纔有助於回答你的問題。 –

回答

0

從你的「setSides()」方法中刪除「var」和類型「數字」。這些是局部變量。你實際上沒有設置任何東西。應該是:

_top = Math.floor(_yPos/tileSize); 
    _bottom = Math.floor((_yPos + 45)/tileSize); 
    _left = Math.floor(_xPos/tileSize); 
    _right = Math.floor((_xPos + 20)/tileSize); 
+0

謝謝,我注意到,只要我發佈它。我不知道爲什麼它沒有提出語法(或其他類型)的錯誤。 我也在構造函數中給它們賦了0(看看爲什麼我認爲我在上面的編輯中有這個),這樣我就不會再有NaN了。 – puggsoy

+0

沒問題。默認值是好的,所以它爲什麼是NaN仍然有點奇怪,但也許是因爲「get」最初並沒有採用默認值,或者不是這樣調用的。 –

0

號默認爲NaN ..所以:

private var _top:Number =0; 
private var _bottom:Number =0; 
private var _left:Number =0; 
private var _right:Number =0; 

和setSides()你用同一個類內部的數字設定瓦爾,所以微量的作品。嘗試setSides()之後,你的getters工作。我希望我是正確的'因爲我很確定這:) :)