无法更新分数

时间:2014-10-04 06:28:56

标签: python-2.7 pygame

我尝试过很多我能想到的编码方式,但是没有一个不会给我错误,也没有更新我的分数。我所拥有的只是一个"得分: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次尝试组合这些元素并且没有更新得分之后,我就不知道还有什么可做。

2 个答案:

答案 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!