Flash AS3: Come faccio a restituire NaN o undefined durante l'utilizzo di tipi di dati interi?

StackOverflow https://stackoverflow.com/questions/4788611

Domanda

sto lavorando su una funzione che prende le coordinate fase mouse in Flash AS3 e piastrelle rendimenti in esadecimale griglia sottostante il cursore. Voglio la funzione restituisca NaN o indefinito se il cursore non è su una tessera e se è, l'indice intero di quella tessera in una matrice di oggetti.

    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;
    }

Ho usato uint per la maggior parte variabili intere, forse questo tipo di dati non supporta NaN o undefined? Questo codice ripercorre 0 dopo tileIndex è definito. Sto utilizzando hitTest perché il hexgrid non è quadrata e viene generato in modo casuale. Tile 0 è la prima tessera e restituendo 0 quando il cursore è spento l'esagono-map sta per causare problemi.

È stato utile?

Soluzione

Nan è di tipo numerico. Non si può lanciarlo significato in un uint.

Se davvero necessario restituire NaN, cambiare la vostra firma funzione per :Number ritorno, ma capire che si potrebbe prendere una leggera penalizzazione delle prestazioni per esso se quella funzione è sulla vostra percorso critico.

Alcuni trucchi C-stile potrebbe essere usato qui: Se gli indici di piastrelle significative sono sempre positivi, e si sentono sicuri che non potrà mai finire con più di 2 miliardi di piastrelle, si potrebbe tornare -1 a dire "Non una tegola ". Avresti bisogno di cambiamento :uint in :int, e fai attenzione a conversioni implicite tra i due tipi in tutto il codice.

Altri suggerimenti

Un altro methos è quello di utilizzare la MAX_VALUE dello stato uint. In pratica non si sarà mai raggiungere il valore ma è possibile controllare contro di esso.

Impedisce un sacco di codice refactoring return uint.MAX_VALUE e per controllarne contro di essa if(value == uint.MAX_VALUE). Se è in un ciclo enterFrame si potrebbe tenta di salvare uint.MAX_VALUE in un const in modo non si ottiene il sovraccarico della ricerca variabili all'interno del uint classe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top