我正在尝试制作一个程序,在tile图块的tile上创建一个正方形。瓷砖是64乘64.我以为我需要获取鼠标的坐标,将其四舍五入到最接近的64的倍数,并将其除以64以获得瓷砖坐标。有没有更好的办法?我应该制作所有瓷砖按钮吗?谢谢!
答案 0 :(得分:7)
您可以按照以下方式执行此操作:
int number = 445226;
int roundoff = (number+0x20)&(~0x3f);
它的工作原理如下:
32
(0x20
)添加到该数字,以便向上/向下舍入。这意味着32
以下的所有内容都会产生小于64
的值,并且大于32
的所有内容都会产生大于64
的值。通常,按位运算比除法和乘法更快。而且由于你要求2的强大功能,这是一个很好的性能黑客你可以使用。
但是如果你对平铺坐标感兴趣,我猜你不必再将其乘以64
。在这种情况下,您可以使用:
int number = 445226;
int div64 = (number+0x20)>>0x06; //this is divided by 64, not rounded
关于用户界面,因为多个答案都是正确的,但是如果您要在其上绘制某种地图,我猜坐标比按钮更好。特别是如果在此过程的后期,人们将能够点击地图上位于两个按钮之间的项目。
答案 1 :(得分:2)
对于正整数:
int m64 = 64 * ((n + 32) / 64);
或者更加花哨,因为64恰好是2的力量:
int m64 = ((n + 32) >> 6) << 6;