Flash AS3: Wie kehre ich Nan oder undefiniert zurück, während ich Integer DataTypes verwendete?

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

Frage

Ich arbeite an einer Funktion, die die Stage-Mauskoordinaten in Flash AS3 nimmt und Fliesen in einem Hex-Gitter unterhalb des Cursors zurückgibt. Ich möchte, dass die Funktion Nan oder undefiniert zurückgibt, wenn sich der Cursor nicht auf einer Fliese befindet und wenn dies der Fall ist, der Ganzzahlindex dieser Fliese in einem Objektarray.

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

Ich habe Uint für die meisten Ganzzahlvariablen verwendet, vielleicht unterstützt dieser Datentyp Nan oder undefiniert nicht? Dieser Code verfolgt 0, nachdem TileIndex definiert ist. Ich benutze Hittest, weil der Hexgrid nicht quadratisch ist und zufällig generiert wird. Fliese 0 ist die erste Fliese und gibt 0 zurück, wenn der Cursor von der Hex-Map ist, Probleme zu Problemen.

War es hilfreich?

Lösung

Nan ist von Typnummer. Sie können es nicht sinnvoll in eine Uint werfen.

Wenn Sie wirklich NAN zurückgeben müssen, ändern Sie Ihre Funktionssignatur, um zurückzukehren :Number, aber verstehen Sie, dass Sie eine geringfügige Leistungsstrafe dafür ergreifen könnten, wenn diese Funktion auf Ihrem kritischen Weg liegt.

Hier könnten einige Tricks im C -Stil verwendet werden: Wenn aussagekräftige Fliesenindizes immer positiv sind und Sie sicher sind, dass Sie niemals mehr als 2 Milliarden Fliesen haben, können Sie -1 zurückgeben, um "keine Fliese" zu bedeuten. Sie müssten sich ändern :uint hinein :int, und seien Sie vorsichtig mit impliziten Conversions zwischen den beiden Typen in Ihrem Code.

Andere Tipps

Ein weiteres Methos ist die Verwendung des max_value des Uint -Zustands. In der Praxis werden Sie niemals den Wert erreichen, aber Sie können dagegen überprüfen.

Verhindert viel Code Refactoring return uint.MAX_VALUE und dagegen zu überprüfen if(value == uint.MAX_VALUE). Wenn es sich in einer Enterframe -Schleife befindet, versuchen Sie möglicherweise, uint.max_value in einer const zu speichern, sodass Sie nicht den Overhead der variablen Suche in der UINT -Klasse erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top