在第14章记分功能实现时,计分板上的得分始终不更新,alien_invasion文件_check_bullet_alien_collision()函数中self.stats.score值随着飞机爆炸增加,但是在绘制到屏幕上时,scoreboard文件中的self.stats.score值一直为0。
寻找了好久的bug,发现当在scoreboard文件中的self.stats.score变量位置上放上settings中的变量时,更新没有问题,但是当放入Game_stats中的变量时就不能更新,于是考虑是stats实例的问题。
最终发现在alien_invasion文件中创建实例时写成了这样:
#创建存储游戏统计信息的实例
#并创建记分牌
self.stats = GameStats(self)
self.sb = Scoreboard(self)
self.stats = GameStats(self)
创建了两次gamestats实例
如果代码写成如下载这样:
#self.stats = GameStats(self)
self.sb = Scoreboard(self)
self.stats = GameStats(self)
则会报错,原因是在创建Scoreboard实例时,在构造函数中需要初始化其中用到的各种属性,其中包含:
self.stats = ai_game.stats
若是写成这样:
self.stats = GameStats(self)
self.sb = Scoreboard(self)
self.stats1 = GameStats(self)
也可以正常运行,所以这里是因为将创建的GameStats实例self.stats给覆盖(刷新)了,
debug:断点设置在 self.sb = Scoreboard(self)这一句
self.stats = GameStats(self)
self.sb = Scoreboard(self)
self.stats1 = GameStats(self)
可以看到在Scoreboard中:
<game_stats.GameStats object at 0x0000024F87DCA548>
继续向下运行,当创建下一个GameStats实例时:
可以看到在Scoreboard中:
<game_stats.GameStats object at 0x0000024F8A14DE48>
第二次创建的实例并没有指向第一次,实例的存储位置不同。
又一次dubug:
显然两个实例位置不同
在创建后续的实例时,使用的是后一个GameStats实例
总之就是使用了两个GameStats实例,两个实例名字一样时,self的指向,参数如何传递有待后面的学习。