如何优化此功能

科迪曼尼

嗨,我创建了此函数,该函数用于将游戏世界分成多个块。每个块的大小为32个块。此公式计算给定世界坐标的给定块编号的开始坐标。它的效果很好,但我认为可以对其进行优化,但我不知道。公式必须使用负数,这一点很重要。

    static int wrld2chnk(int wrld)
    {
        if (wrld % 32 != 0)
        {
            if (wrld < 0)
                wrld -= (32 + wrld % 32);
            else
                wrld -= wrld % 32;
        }
        return wrld;
    }

//这些是示例值,可用于验证结果。每个rpw中的第一个值是方法输入,第二个是输出:

    (0, 0);
    (31, 0);
    (32, 32);
    (33, 32);
    (-1, -32);
    (-31, -32);
    (-32, -32);
    (-33, -64);
    (-34, -64);
    (-64, -64);
    (-70, -96);
哈罗德

首先,第一个if可以明确地走。正数情况也适用于零:

static int wrld2chnk(int wrld)
{
    if (wrld < 0)
        wrld -= (32 + wrld % 32);
    else
        wrld -= wrld % 32;
    return wrld;
}

但这可能要简单得多。您正在解决%关心标志的事实四舍五入到2的幂的倍数要容易得多,只需使用按位AND并舍入为2的幂的负数即可:

static int wrld2chnk(int wrld)
{
    return wrld & -32;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章