我可以将精灵的x位置增加-0.01,但不能增加0.01?

时间:2014-04-28 20:28:12

标签: python pygame sprite

每当我尝试将0.01添加到我的x位置时,没有任何反应,但是当我添加-0.01时,它可以正常工作。

class Ball(Sprite):
    def __init__(self,colour,x,y,radius,thickness):
        self.speed = 0.01
        self.angle = math.pi/2

        self.colour = colour

        self.x = x
        self.y = y
        self.radius = radius
        self.thickness = thickness

        self.rect = pygame.Rect(self.x,self.y,self.radius*2,self.radius*2)

    def draw(self,screen):
        pygame.draw.circle(screen,self.colour,[self.rect.x,self.rect.y],self.radius,self.thickness)

    def move(self):
        self.rect.x += 0.01 # this doesn't work
        self.rect.x -= 0.01 # this does

显然,同时将两者放在一起会让精灵根本不动,但它仍会向左移动。

1 个答案:

答案 0 :(得分:1)

Pygame Rects对这些属性使用整数,因为它们代表像素值,这是屏幕上可能的最小单位。

所以,首先,递增0.01是没有意义的。 其次,你正在成为int舍入的受害者,这就是为什么当前递减正在工作而增量不是。这是因为(2 + 0.01)2.01变为2,其中1.99变为1.即成功递减。

使用python shell

可以很容易地显示出来
>>> rect = pygame.Rect(100, 100, 10, 10)
>>> rect
<rect(100, 100, 10, 10)>
>>> rect.x
100
>>> rect.x += 0.01
>>> rect.x
100
>>> rect.x -= 0.01
>>> rect.x
99

我对未来的建议是将位置存储在元组(x,y)中,其中x和y是浮点数。有了它,你可以增加0.01,它将有效。 但是在设置rect属性时将这些转换为int。

pos = (x, y)
x = pos[0]
x += 0.01 ## or anything you want
pos = (x, y)
## got to unpack and repack due to immutability of tuples (there are other ways)
rect.x = int(x)