所以我试图让球在框架上的随机位置上产生并让它们穿过屏幕的中心。唯一的问题是,我无法用浮动速度更新位置。因此事情并没有通过中心,他们有点偏离,而不是我希望它的工作方式。有什么想法吗?
我会发布整个代码,但基本上我的速度看起来像: [-4.6076,-3.2818],我像这样更新位置:
def movement(self):
self.pos[0] += self.vel[0]
self.pos[1] += self.vel[1]
唯一的事情就是当我尝试像这样移动它时,我得到一个错误,说明了一个int参数,但是得到了一个浮点数。我有点不对劲,因为我需要更多的精确度,而不仅仅是一个整数,我可以用任何方式解决这个问题吗?此外,我正在使用trig计算速度,因此这就是导致浮动的原因。
任何时候都将不胜感激。 谢谢你!
完整错误:
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
答案 0 :(得分:2)
除了整数之外,不可能获得更高的精确度,因为你无法为像素的一小部分着色。我建议在内部使用浮点数,然后舍入屏幕上显示的实际值。
答案 1 :(得分:1)
四舍五入是一个糟糕的答案,但我没有任何其他答案。
如果在行驶x轴或y轴时将速度设置为1,则乘以速度系数,即可正常工作。
对角线是个问题。您可以设置对角线的最小值是v(1,1)。这意味着你有一个sqrt(2)的幅度,它快于1.你在对角线的任何时候都会移动得更快。如果你想做任何不是45度的角度,那就更糟了。
答案 2 :(得分:1)
问题是pygame
将所有坐标和大小(例如rect
的{{1}})量化为整数。为了实现所需的功能,您必须自己在自己的数据结构中跟踪位置和速度,并且仅将生成的位置传输到pygame对象。在您的情况下,它看起来像这样:
x,y,h,w
这样,您可以在内部保持位置的全部精度,并且仅对结果位置进行量化。
问候 克劳斯