Flash AS3: Как вернуть NAN или неопределенное при использовании целочисленных данных?
-
24-10-2019 - |
Вопрос
Я работаю над функцией, которая выводит на сцену координаты мыши во Flash AS3 и возвращает плитку в шестигранной сети под курсором. Я хочу, чтобы функция возвращала NAN или неопределенную, если курсор не находится на плите и, если это так, целочисленный индекс этой плитки в массиве объектов.
public function getCursorTile(mX:Number,mY:Number):uint
{
var tileIndex:uint = new uint(NaN);
trace(tileIndex);
for (i=0; i<tileArray.length; i++)
{
if (tileArray[i].hitTestPoint(mX,mY,true))
{
tileArray[i].tileBorder.gotoAndStop(1);
tileIndex = i;
}
}
return tileIndex;
}
Я использовал UINT для большинства целочисленных переменных, возможно, этот тип данных не поддерживает NAN или неопределенные? Этот код прослеживает 0 после определения TileIndex. Я использую Hittest, потому что Hexgrid не квадратный и случайным образом генерируется. Плитка 0-это первая плитка и возвращение 0, когда курсор не выйдет из шестнадцатеричной карты, вызовет проблемы.
Решение
Нэн имеет типовой номер. Вы не можете разбить это в UINT.
Если вы действительно должны вернуть NAN, измените подпись функции на возврат :Number
, но поймите, что вы можете получить небольшой штраф за производительность, если эта функция находится на вашем критическом пути.
Здесь можно использовать какую -то хитрость в C -стиле: если значимые индексы плитки всегда являются положительными, и вы уверены, что никогда не получите более 2 миллиардов плиток, вы можете вернуть -1, чтобы означать «не плитка». Вам нужно изменить :uint
в :int
, и будьте осторожны с неявными преобразованием между двумя типами на протяжении всего вашего кода.
Другие советы
Другой метос - использовать MAX_VALUE состояния UINT. На практике вы никогда не достигнете значения, но вы можете проверить это.
Предотвращает много кодового рефакторинга return uint.MAX_VALUE
и проверить это if(value == uint.MAX_VALUE)
. Анкет Если он находится в цикле Enterframe, вы можете попытаться сохранить uint.max_value в const, чтобы вы не получили накладные расходы переменной в классе Uint.