python-3.x - 需要整数参数,得到浮点错误
问题描述
我在 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):
解决方案
使用 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() 而不是每个单独的。
任何时候可以限制转换都将有助于保持代码干净并消除舍入错误。
推荐阅读
- jupyter-lab - 如何在 jupyterlab 启动器中添加自定义文件类型?
- c# - 如何对连接的 TPL 数据流块进行错误处理?
- node.js - AWS MSK 触发器 - Lambda(消费者)无限运行
- java - 映射外键 JPA
- javascript - 无法让 Google Sheets Node.js API 从工作表中获取值并将它们返回到数组中
- python - 如何使用 pyautogui 添加开和关按钮?
- python-3.x - 将数据从一个视图传递到另一个视图:Django
- android - 在最新版本的 android studio 中哪里可以找到 r.java
- git - 如何在所有 git 提交中搜索涉及多个字符串的更改,并对未更改的内容有一定的限制?
- flutter - flutter pub get : - fstore 依赖于来自依赖 async 2.8.1 的路径中的激发 UI,需要 async 2.8.1