0

我正在开发一个函数,该函数在 Flash AS3 中获取舞台鼠标坐标并在光标下方的十六进制网格中返回图块。如果光标不在图块上,我希望函数返回 NaN 或未定义,如果是,则返回对象数组中该图块的整数索引。

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

我一直在对大多数整数变量使用 uint,也许这种数据类型不支持 NaN 或未定义?此代码在 tileIndex 定义后跟踪 0。我正在使用 hitTest 因为 hexgrid 不是正方形的并且是随机生成的。瓷砖 0 是第一个瓷砖,当光标离开十六进制地图时返回 0 会导致问题。

4

2 回答 2

6

NaN 是 Number 类型。您不能将其有意义地转换为 uint。

如果您确实必须返回 NaN,请将您的函数签名更改为 return :Number,但请理解,如果该函数在您的关键路径上,您可能会为此付出轻微的性能损失。

这里可以使用一些 C 风格的技巧:如果有意义的图块索引始终为正数,并且您确信最终不会超过 20 亿个图块,则可以返回 -1 表示“不是图块”。您需要更改:uint:int,并注意整个代码中两种类型之间的隐式转换。

于 2011-01-25T00:05:53.293 回答
1

另一种方法是使用 uint 状态的 MAX_VALUE。在实践中,您永远不会达到该值,但您可以对其进行检查。

防止大量代码重构return uint.MAX_VALUE并对其进行检查if(value == uint.MAX_VALUE)。如果它在 enterframe 循环中,您可能会尝试将 uint.MAX_VALUE 保存在 const 中,这样您就不会在 uint 类中获得变量查找的开销。

于 2011-01-25T21:37:42.567 回答