У меня были некоторые странные проблемы с кодом столкновения игры, которую я делаю, и я смог отследить это до следующего: получатели моих свойств возвращают 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
).После этого я запускаю трассировку, которая получает значения с помощью геттеров, но все они возвращают NaN.
Дело в том, что если я запускаю аналогичную трассировку в setSides()
, не используяПолучатели - то есть, используя переменные напрямую - они возвращают правильные значения.И чтобы убедиться, я также сделал это в функции , используя геттеры , так что я уверен, что они в этом проблема.
Кто-нибудь знает, что происходит?
РЕДАКТИРОВАТЬ: Вот моя 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» было также до упомянутого мной тестирования и повторного редактирования, поэтому его не было.