首页 > 解决方案 > 需要整数参数,得到浮点错误

问题描述

我在 Windows 8 上,我使用 python 3.7,但我遇到了 pygame 的问题。

首先,对不起我糟糕的英语。我尝试遵循 magpi 的基本游戏 v1 并尝试使用 drop.py 对其进行测试,但是当我运行时,它返回一个错误 --> 预期整数参数,得到浮点数

我被困在这条线上

    if surface.get_at((player["x"], player["y"] + player["height"])) == (0, 0, 0, 255):

这是变量源

player = {
"x": int(windowWidth / 2),
"y": 0,
"height": 25,
"width": 10,
"vy": 5

}

我转换了 player["x"] 因为我知道 pygame.surface.get_at 期望一个整数而不是浮点数。但即使我使用 int() 函数转换浮点值,我仍然会收到此错误。

你能帮我吗,我试图打印该值以确保它返回一个整数,它确实返回了一个整数,但我不明白为什么我仍然会收到错误。

我在 stackoverflow 上进行了搜索,但没有一个主题能帮助我解决这个问题。这就是我第一次在stackoverflow上询问的原因。

提前感谢您的任何回答。

更新:我在我的函数中将所有变量转换为整数,并且游戏正常工作,但对我来说似乎很难编码。我做错什么了吗 ?

    if surface.get_at((int(player["x"]), int(player["y"]) + int(player["height"]))) == (0, 0, 0, 255):

标签: python-3.xpygame

解决方案


使用 pygame 和 python 编写游戏时使用浮点数和整数有时看起来有点笨拙。这是因为屏幕是以像素为单位测量的整数。因此,如果不先转换它们,就不能尝试使用浮点数绘制或访问任何像素。有几个解决方案:

1)不要使用浮动。这将限制您游戏的功能,但简单的游戏可以摆脱它。始终将所有内容转换为 int 就相当于此。

2)在绘制或访问任何像素之前的最后一刻转换您的浮点数。您现在可以继续对带有浮动的播放器进行操作。这将有助于使您的代码更易于查看,并通过重复调用 int 来帮助舍入错误。舍入错误会使屏幕上的内容看起来有点“偏离”。

例如(虽然很简单):

speed = 1.5
player["x"] += speed
player["y"] += speed / 2
if surface.get_at(int(player["x"]), int(player["y"] + player["height"])) == (0, 0, 0, 255):
    # do stuff

注意当涉及像素时,数字被转换的最后可能时刻。还要注意操作player["y"] + player["height"]。操作的结果被转换为一个 int() 而不是每个单独的。

任何时候可以限制转换都将有助于保持代码干净并消除舍入错误。


推荐阅读