Pygame 不允许我将 float 用于 rect.move,但我需要它

Posted

技术标签:

【中文标题】Pygame 不允许我将 float 用于 rect.move,但我需要它【英文标题】:Pygame doesn't let me use float for rect.move, but I need it 【发布时间】:2020-12-07 15:01:54 【问题描述】:

我最近在 Python 3 和 Pygame 中重新创建了Lunar Lander 的一个版本(你知道,旧的复古游戏):由于重力,我的着陆器沿 y 轴移动 (̀̀̀rect.move) 每一帧。\

问题: 在我达到 1 m/s 之前,添加到 rect.move 的 y 值是一个小于 1 的浮点数:我必须使用 int() 对其进行四舍五入,因为 pygame 不喜欢浮点数。 在之前的 Tkinter 版本中,着陆器的 y 坐标是这样的:

0.01
0.02
...
0.765
1.03
1.45
...

在 pygame 中是

0
0
0
...
1
1
1
2
2
...

这真的很烦人,因为动作并不流畅。 有人知道如何解决这个问题吗?比如,输入一个浮点数到rect.move? 提前致谢!

【问题讨论】:

【参考方案1】:

由于pygame.Rect应该代表屏幕上的一个区域,所以pygame.Rect对象只能存储整数数据:

Rect 对象的坐标都是整数。 [...]

如果要以浮点精度存储对象位置,则必须将对象的位置存储在单独的变量和属性中,并同步pygame.Rect 对象。 round 坐标并将其分配给矩形的位置(例如.topleft):

x, y = # floating point coordinates
rect.topleft = round(x), round(y)

【讨论】:

【参考方案2】:

我自己没有测试过,所以如果这不起作用,我很抱歉,但我认为 python 将数字作为字符串而不是 int(variable)

你应该这样做float(variable)

【讨论】:

以上是关于Pygame 不允许我将 float 用于 rect.move,但我需要它的主要内容,如果未能解决你的问题,请参考以下文章

Pygame - 使用Sprites渲染多行文本

如何在pygame中检测两个矩形对象或图像之间的碰撞

为啥 PyGame 不播放声音

Pygame:允许点击通过窗口

windows系统下安装pygame

Route53 中的 A Rec 和 CNAME 之间的区别