【问题标题】:integer argument expected, got float error需要整数参数,得到浮点错误
【发布时间】:2018-12-13 23:05:17
【问题描述】:

我在 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):

【问题讨论】:

  • 我的想象是 player["x"] 和 player["y"] 在初始化后会在某个地方更新。尝试在对 get_at() 的函数调用中直接将它们转换为 int
  • @BardhokAjvazi 请发布short but runnable example,以便我们重现错误。此外,请始终在问题中包含完整的错误消息(堆栈跟踪)。
  • @skrx 当我在电脑前时,我将发布一个可运行的示例。再次感谢您的帮助。
  • @The4thIceman 我在函数内部将所有变量转换为整数,它可以工作,但它似乎是硬编码的。

标签: python-3.x pygame


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多