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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top