我在制作游戏的碰撞代码方面遇到了一些奇怪的问题,而且我已经能够将其追溯到这个:我的属性的吸气者正在返回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"也是在我提到的这个测试和重新编辑之前,所以它没有出现。
答案 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);