Getter回归NaN

时间:2011-12-01 18:06:47

标签: flash actionscript-3 oop getter

我在制作游戏的碰撞代码方面遇到了一些奇怪的问题,而且我已经能够将其追溯到这个:我的属性的吸气者正在返回NaN而不是实际的数字。

这是属性的声明,位于类的顶部:

private var _top:Number;
private var _bottom:Number;
private var _left:Number;
private var _right: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;
}

通过调用类实例的公共函数setSides(tileSize:Number)生成值(值取决于tileSize参数)。在我运行之后,我运行了一个使用getter获取值的跟踪,但所有这些都返回NaN。

问题是,如果我在setSides()内运行类似的跟踪,而不使用getter - 即直接使用变量 - 它们会返回正确的值。 为了确保,我也使用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 个答案:

答案 0 :(得分:0)

数字默认为nan .. so:

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

并且在setSides()中,您在同一个类中设置带有数字的变量,因此跟踪有效。尝试setSides(),之后你的getter工作。我希望我是对的'因为我对此非常肯定:)。

答案 1 :(得分:0)

从“setSides()”方法中删除“var”和“Number”类型。那些是局部变量。你实际上并没有设置任何东西。应该是:

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