Flash AS3: Come faccio a restituire NaN o undefined durante l'utilizzo di tipi di dati interi?
-
24-10-2019 - |
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.
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.