预期整数参数,出现浮点错误

时间:2018-12-12 20:50:11

标签: python-3.x pygame

我在Windows 8上,使用python 3.7,并且pygame有问题。

首先,对不起我的英语不好。我尝试遵循magpi的Essentials 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

}

我转换了播放器[“ x”],因为我知道pygame.surface.get_at需要一个整数而不是浮点数。但是,即使我使用int()函数转换了float值,我仍然会收到此错误。

能帮我吗,我尝试打印该值以确保它返回整数,但确实可以,但是我不明白为什么我仍然会出错。

我搜索了stackoverflow,但没有一个主题对这个问题有所帮助。这就是为什么我第一次要求stackoverflow。

在此先感谢您的回答。

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

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

1 个答案:

答案 0 :(得分:0)

使用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()而不是每个单独的结果。

任何时候您都可以限制转换次数,这将有助于保持代码整洁并消除舍入错误。