pygame里的飞船运动为什么要self.x=float(self.rect.x)然后又赋值回去不能直接以self.rect.x去计算

#在飞船的属性x中存储小数值
self.x = float (self.rect.x)
#根据self.x更新rect对象
self.rect.x = self.x

如果说这个是因为只能存储整数值 那为什么后面子弹以整数速度去运动的也要这么写

self.settings.bullet_speed = 1.0
self.y -= self.settings.bullet_speed
self.rect.y = self.y

img

大概是因为,让3行代码变成2行?没有具体代码,也就只能看出来这点了

    f = float(self.rect.x)
    self.x = f
    self.rect.x = f

因为计算要用保留小数,所以要转换为浮点型数据,便改了个名字self.rect.x,至于后面又把名字还回去是因为更新飞船的位置需要用到的是self.rect.x

作为初学者也想了很久。rect.x 只能保留int 整数,而设定的速度是浮点数,所以用另一个变量self.x 来储存浮点数。self.rect.x = self.x 仍旧是以整数返回给self.rect.x。 换句话说船是以2-1-2-1-2-1 的速度行驶的,只是因为帧率够大,肉眼看不出来,肉眼看到的是匀速运动。把帧率调整到1,就能很清楚的看到船是快-慢-快-慢的行动了。