2014-02-15 68 views
0

所以我试图让球产生在框架上的随机位置,并让它们通过屏幕中心。唯一的问题是,我无法用浮动速度更新位置。因此,事情并没有通过中心,他们是有点关闭,而不是我想要它的工作。有任何想法吗?需要在屏幕上移动物体的浮动精度Pygame

我会后整个代码,但基本上我得到的速度看起来像: [-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 
+1

请您发布完整的错误信息? –

+0

你描述的错误听起来不像它来自你认为它的来源。也许你不小心尝试访问一个浮点列表作为索引? – user2357112

回答

2

这是不可能得到更准确的不仅仅是一个整数,因为你不能颜色的像素的一小部分。我建议在内部使用浮点数,然后舍入屏幕上显示的实际值。

+0

如果我在一个点周围围成一圈,那么真的不可能让它们都聚焦在一个点上。因为要得到合成速度,我需要使用trig,这会给出一些非常难看的浮点数。所以这是唯一的方法,那么就会有错误的余地呢? – user3260745

0

舍入是一个很差的答案,但我没有任何其他答案。

如果您在行驶x或y轴时将速度设置为1,然后乘以您的速度系数,那么运行良好。

对角线是问题。你可以设置你的对角线的最小值是v(1,1)。这意味着你有一个sqrt(2)的幅度比1快。每当你走向对角线时,你都会更快地移动。如果你想做任何不是45度的角度,情况就会变得更糟。