2011-12-01 106 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工作。我希望我是正确的'因为我很确定这:) :)