我尝试过很多我能想到的编码方式,但是没有一个不会给我错误,也没有更新我的分数。我所拥有的只是一个"得分:0"在屏幕的右上角,只要从我的船上发射的激光束与敌舰发生碰撞,它就会发生变化。这是我的最后一次尝试。在我的classes.py文件中,在Ship类构造函数中,我已经初始化了分数:
self.score = 0
并在Ship类中设置2个staticmethods:
@staticmethod
def set_score(score):
for ship in Ship.List:
ship.score = score
@staticmethod
def get_score():
for ship in Ship.List:
return ship.score
考虑到只有一个,这是一种指向我的船的愚蠢方式,但它是我知道和工作的唯一方式,没有任何范围错误。在processes.py文件中,我有:
for laser in classes.Ship_laser.List:
if pygame.sprite.spritecollide(laser, classes.Enemy_ship.List, True):
laser.destroy()
classes.Ship.set_score += 50
return classes.Ship.set_score()
并且在GameScene类的classes.py文件中我放在while循环之外:
myriadProFont = pygame.font.SysFont('Myriad Pro', 30)
并在while循环中:
show_score = myriadProFont.render('Score: %s' %Ship.get_score(), 1, (255,255,255),None)
screen.blit(show_score, (550,30))
所有这些都显示我是值为0的分数(或者我在该行中的Ship类构造函数中放置的任何值self.score = 0)。我知道这行
classes.Ship.set_score += 50
不能正确,因为set_score是一个函数,而不是一个变量,但是在大约30次尝试组合这些元素并且没有更新得分之后,我就不知道还有什么可做。
答案 0 :(得分:2)
我认为问题在于:
classes.Ship.set_score += 50
我看不出它是如何工作的 - 因为set_score是一个方法,而不是属性 - 我认为你需要的是:
classes.ship.set_score(ship.get_score()+50)
也是:而不是:
@staticmethod
def set_score(score):
for ship in Ship.List:
ship.score = score
@staticmethod
def get_score():
for ship in Ship.List:
return ship.score
这可能有效:
def set_score(self, score):
self.score = score
def get_score(self):
return self.score
这取决于您是否正确使用了您的船级 - 这是从代码片段中无法分辨的。
答案 1 :(得分:0)
我以另一种方式解决了这个问题:我删除了Ship.set_score()和Ship.get_score()方法,并删除了对它们的调用,并从Ship类构造函数中删除了self.score = 0行。在我的PlayingGameScene中class i初始化了一个得分变量:
score = 0
在while循环之外的,在while循环内部,我定义了更新
所包含的分数的条件score += 50
和
show_score = myriadProFont.render('Score: ' +str(score), 1, (255,255,255),None)
screen.blit(show_score, (520,30))
感谢您的帮助,Tony!