【发布时间】:2017-12-30 12:42:26
【问题描述】:
我在 Python 3.4.3 (Win8.1) 上使用 PyGame 1.9.2。
我的游戏窗口包含一个使用 48x48px 瓷砖的瓷砖地图。游戏框架使用游戏框架类的以下方法根据玩家输入移动图块:
def moveTiles(self):
xmove = self.parent.dt * self.panning[0] * self.panning_speed
ymove = self.parent.dt * self.panning[1] * self.panning_speed
for tile in self.game_map:
tile.x += xmove
tile.y += ymove
tile.rect.x = int(tile.x)
tile.rect.y = int(tile.y)
tile.pos = (tile.rect.x, tile.rect.y)
虽然“self.panning_speed”很容易解释,但 self.panning 是一个包含 x 和 y 平移的两个值的列表(例如 [0, 0] = 不平移,[-1, 1] = 向下平移 -左等)。
然后将 tile.x/tile.y 值“整合”以用作 rect 和 pos(后者用于 blitting)的 x-/y-值。
我将完全相同的数量添加到每个图块的 x/y 值,然后我在它们上使用“int”,据我所知,它总是将浮点数降低到下一个较低的 int。所以从技术上看,每个图块的 x/y 值的相对变化与任何其他图块的 x/y 值完全相同。
然而:我仍然时不时地在行或列之间出现间隙!这些间隙不规则地显示,但非常明显,当您停止平移而间隙可见时,该间隙将一直存在,直到您再次平移。
请参阅此图片以获取示例: See this image for an example (black line in the red square is the gap; gold and pink are the tiles)
我的代码中哪里会出现这些空白?
【问题讨论】:
-
floatnumber 不能保留每个值,所以我们遇到0.1 + 0.2 != 0.3的情况。 -
我只会使用整数值。或decimal。或整数值,并在一个变量中保持 int 和 float 之间的差异以累积该差异,然后在累积值大于 1 时添加到所有变量 1。
-
请提供minimal, complete and verifiable example,以便我们为您提供合适的解决方案。