gpt4 book ai didi

gml - 我想知道如何将 "a-(a%b) "转换为 "a&(~b)"(捕捉网格公式)

转载 作者:行者123 更新时间:2023-12-01 14:15:31 26 4
gpt4 key购买 nike

当我搜索捕捉网格功能时。其实就是Tile Collide。(你可能知道我学GMS2是因为tags..)

这对我的问题不重要。

切入正题,我了解了这个公式。

pos.x - (pos.x % gridwidth)  <- this is number calculation.

我想要的效果很好。我发现了不同的公式。

这个公式适用于物体和瓷砖的碰撞。

(pos.x)&~(gridwidth-1)    <- this is binary calculation.

它有同样的工作。发生什么事??我不明白这些公式是如何转换的..

实际上,我理解“&”与减法的作用相同。但我不明白其他人。

例如

var f1,f2;
var pos_x = 102;
var gridwidth = 64; // It must be even power of 2.
f1 = pos_x - (pos_x % gridwidth);
f2 = (pos_x)&(~(gridwidth-1));

最佳答案

只有当 gridwidth 是 2 的偶次方时,这两个公式才等价,例如 128、256、2048 等。

在任何一种情况下,pos.x - (pos.x % gridwidth) 都将 floor 返回到 gridwidth 的偶数倍, “捕捉”到该网格单元格的开头,其中网格由宽度为 gridwidth 的单元格组成。

如果您可以假设 gridwidth 是 2 的偶次方,那么 (pos.x)&~(gridwidth-1) 就是做同样的事情。基本上,在这个假设下,一个网格单元中的每个值只会在其低阶位上有所不同……gridwidth 位下方的位。此代码只是清除这些位,从而将结果计算为 gridwidth 的偶数倍,这将是该网格单元格中的第一个位置。

关于gml - 我想知道如何将 "a-(a%b) "转换为 "a&(~b)"(捕捉网格公式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55561595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com