Flash AS3: ¿Cómo devuelvo NAN o indefinido mientras uso los tipos de datos enteros?
-
24-10-2019 - |
Pregunta
Estoy trabajando en una función que toma las coordenadas del mouse del escenario en Flash AS3 y devuelve el mosaico en una red hexagonal debajo del cursor. Quiero que la función devuelva nan o indefinida si el cursor no está en un mosaico y, si es así, el índice entero de ese mosaico en una matriz de objetos.
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;
}
He estado usando UINT para la mayoría de las variables enteras, ¿tal vez este tipo de datos no admite NAN o indefinido? Este código traza 0 después de que se define TileIndex. Estoy usando hittest porque el hexgrid no es cuadrado y se genera aleatoriamente. El mosaico 0 es el primer mosaico y devuelve 0 cuando el cursor está fuera del mapa hexadecimal va a causar problemas.
Solución
Nan es de número de tipo. No puedes lanzarlo significativamente en un uint.
Si realmente debe devolver NAN, cambie su firma de función para devolver :Number
, pero comprenda que puede tomar una ligera penalización de rendimiento si esa función está en su camino crítico.
Aquí podría usarse algunos trucos de estilo C: si los índices de baldosas significativos siempre son positivos, y se siente seguro de que nunca terminará con más de 2 mil millones de mosaicos, podría regresar -1 para significar "no un mosaico". Necesitarías cambiar :uint
dentro :int
, y tenga cuidado con las conversiones implícitas entre los dos tipos a lo largo de su código.
Otros consejos
Otro methos es usar el max_value del estado UINT. En la práctica, nunca alcanzará el valor, pero puede verificarlo.
Previene mucha refactorización de código return uint.MAX_VALUE
y para comprobarlo if(value == uint.MAX_VALUE)
. Si está en un bucle EnterFrame, puede intentar guardar uint.max_value en un constante para que no obtenga la sobrecarga de la búsqueda variable dentro de la clase UINT.