嗨,我创建了此函数,该函数用于将游戏世界分成多个块。每个块的大小为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] 删除。
我来说两句