当我搜索捕捉网格功能时。实际上是Tile Collide。(您可能知道我是因为标签而学习GMS2的。)
这对我的问题并不重要。
追逐追赶,我了解了这个公式。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.widgets as mwidgets
fig = plt.figure()
ax = plt.axes()
x = np.arange(0,2*np.pi)
y = np.sin(x)
ax.plot(x,y)
ax.set_title('[Press \'enter\' and \'shift+enter\' to select the intervals]')
def onselect(vmin, vmax):
if plot_key_input == 'enter':
print('Interval type 1:', vmin, vmax)
if plot_key_input == 'enter+shift':
print('Interval type 2:', vmin, vmax)
# The variable plot_key_input will store the key that is pressed during the plot visualization
plot_key_input = None
# Get the key pressed during the plot visualization
def onPressKey(event):
# Defined as a global variable so it will affect other programs and functions
global plot_key_input
plot_key_input = event.key
# Connect the keys to the function onPressKey during the plot visualization
cid = fig.canvas.mpl_connect('key_press_event', onPressKey)
span = mwidgets.SpanSelector(ax, onselect, 'horizontal')
plt.show()
# Disconnect the keys to the function onPressKey
fig.canvas.mpl_disconnect(cid)
我想要的效果很好。我发现了不同的公式。
此公式适用于obj和tile的碰撞。
pos.x - (pos.x % gridwidth) <- this is number calculation.
它具有相同的工作。发生什么事??我不明白这些公式是如何转换的。
实际上,我知道'&'与减法具有相同的作用。 但是我不理解其他人。
例如
(pos.x)&~(gridwidth-1) <- this is binary calculation.
答案 0 :(得分:1)
仅当gridwidth
是2的偶数幂(例如128、256、2048等)时,这两个公式才等效。
在两种情况下,pos.x - (pos.x % gridwidth)
都将floor
返回gridwidth
的偶数倍,“捕捉”到该网格单元格的开始处,其中网格由宽度gridwidth
。
如果您可以假设gridwidth
是2的偶数次幂,那么(pos.x)&~(gridwidth-1)
在做同样的事情。基本上,在这种假设下,一个网格单元中的每个值的不同之处仅在于其较低阶位……gridwidth
位以下的位。该代码只是清除这些位,从而将结果计算为gridwidth
的偶数倍,它将是网格中该单元格中的第一个位置。