我正在研究一个函数,该函数将阶段鼠标坐标在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或未定义?定义了瓷砖后,此代码跟踪0。我之所以使用Hittest,是因为六边形不是正方形的,并且是随机生成的。瓷砖0是第一个瓷砖,当光标脱离十六进制时,返回0将引起问题。

有帮助吗?

解决方案

NAN是类型号。您无法将其有意义地投入到UINT中。

如果您真的必须返回NAN,请更改功能签名以返回 :Number, ,但是请理解,如果该功能在您的关键道路上,您可能会稍微罚款。

可以在这里使用一些C风格的欺骗性:如果有意义的瓷砖索引总是积极的,并且您会感到最终不会有超过20亿英尺,那么您可以回报-1表示“不是瓷砖”。你需要改变 :uint 进入 :int, ,并且要谨慎对待整个代码之间的两种类型之间的隐式转换。

其他提示

另一种方法是使用UINT状态的MAX_VALUE。实际上,您将永远不会达到价值,但您可以对其进行检查。

防止许多代码重构 return uint.MAX_VALUE 并检查它 if(value == uint.MAX_VALUE). 。如果在肠循环中,您可以尝试将UINT.MAX_VALUE保存在const中,以便您在UINT类内的变量查找的开销。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top