gpt4 book ai didi

python - 在屏幕 Pygame 上移动物体需要 float 精度

转载 作者:行者123 更新时间:2023-11-28 21:56:14 24 4
gpt4 key购买 nike

所以我试图让球在画面的随机位置生成,并让它们穿过屏幕的中心。唯一的问题是,我无法用 float 速度更新位置。因此,事情没有通过中心,它们有点偏离,这不是我想要的方式。有什么想法吗?

我将发布整个代码,但基本上我得到的速度如下所示:[-4.6076, -3.2818],我这样更新位置:

def movement(self):
self.pos[0] += self.vel[0]
self.pos[1] += self.vel[1]

唯一的问题是,当我尝试像这样移动它时,我收到一条错误消息,指出需要一个 int 参数,但却得到了一个 float。我有点不对劲,因为我需要比整数更高的准确性,有什么办法可以解决这个问题吗?此外,我正在使用三角函数计算速度,因此这就是导致 float 的原因。

任何时候都将不胜感激。谢谢你!

整个错误:

Traceback (most recent call last):
File "G:\Tonematrix_2\circle-circle-collisionrect.py", line 125, in <module>
class loop(object):
File "G:\Tonematrix_2\circle-circle-collisionrect.py", line 138, in loop
ball.render()
File "G:\Tonematrix_2\circle-circle-collisionrect.py", line 90, in render
pygame.draw.circle(FRAME, self.color , self.pos ,self.radius, 0)
TypeError: integer argument expected, got float

最佳答案

问题是 pygame 将所有坐标和大小(例如 rectx,y,h,w)量化为整数。为了实现你想要的,你必须自己在自己的数据结构中跟踪位置和速度,并且只将结果位置传输到 pygame 对象。在您的情况下,它看起来像这样:

class ...():
pos_float = [0,0]
...
def movement(self):
self.pos_float[0] += self.vel[0]
self.pos_float[1] += self.vel[1]

self.pos[0] = int(self.pos_float[0])
self.pos[1] = int(self.pos_float[1])

这样你就可以在内部保持位置的完整精度,并且只量化结果位置。

问候克劳斯

关于python - 在屏幕 Pygame 上移动物体需要 float 精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21793340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com