Геттер, возвращающий NaN - PullRequest
       18

Геттер, возвращающий NaN

0 голосов
/ 01 декабря 2011

У меня были некоторые странные проблемы с кодом столкновения игры, которую я делаю, и я смог отследить это до следующего: получатели моих свойств возвращают 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» было также до упомянутого мной тестирования и повторного редактирования, поэтому его не было.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

Удалите "var" и тип "Number" из вашего метода "setSides ()".Это локальные переменные.Вы на самом деле ничего не устанавливаете.Должно быть:

    _top = Math.floor(_yPos / tileSize);
    _bottom = Math.floor((_yPos + 45) / tileSize);
    _left = Math.floor(_xPos / tileSize);
    _right = Math.floor((_xPos + 20) / tileSize);
0 голосов
/ 01 декабря 2011

Числовые значения по умолчанию: nan .. so:

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

и в setSides () вы устанавливаете переменные с числами внутри одного класса, поэтому трассировка работает.Попробуйте установить setSides () и после этого ваши геттеры будут работать.Я надеюсь, что я прав, потому что я так уверен в этом:)

...