1、错误提示及代码片段
在完成《Python编程:从入门到实践 》书中练习14-3的过程中遇到了该错误,错误提示:
File "D:\code\eclipse-workspace\pygame_test\14_3\bullet.py", line 30, in update
self.rect.x = self.x
TypeError: invalid rect assignment
出现错误的代码片段:
def update(self):
'''向右移动子弹'''
#更新表示子弹位置的小数值
self.x += self.speed_factor
#更新表示子弹的rect的位置
self.rect.x = self.x
2、错误分析
TypeError是说传入的对象与要求的不一致,就数据类型而言,这里的赋值是没有问题的。经过调试发现,问题并不在update函数,而是由于另外一个可以修改speed_factor的函数increase_speed调用次数过多引起的。increase_speed的调用可以增加speed_factor,导致speed_factor在短时间内变成一个相当大的数,那么对应的self.x也获得一个相当大的值,而self.rect.x并不能容纳的下这个值,于是就产生了TypeError。
3、错误解决
限制函数increase_speed的调用次数,从而使self.x的值不至于太大,就不会再出现这个问题了