Pygame不允许我在rect.move中使用float,但我需要它

2024-06-16 09:31:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

问题:
在达到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输入一个浮点? 提前谢谢


Tags: rect版本游戏movetkinterpygamepython3重力
2条回答

由于^{}应该表示屏幕上的一个区域,因此pygame.Rect对象只能存储整数数据:

The coordinates for Rect objects are all integers. [...]

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

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

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

你应该做float(variable)

相关问题 更多 >