2014-10-04 5 views
-3

Я пробовал кодировать много способов, о которых я могу думать, но ни один из них, который не дает мне ошибок, также не обновляет мой результат. Все, что у меня есть, это «Оценка: 0» в верхнем правом углу экрана, и он должен меняться всякий раз, когда лазерный луч, выпущенный с моего корабля, сталкивается с вражеским кораблем. Вот моя последняя попытка. В моем classes.py файл, в Корабельный конструктор класса я инициализируется счет:не может обновить счет

self.score = 0 

и установить 2 staticmethods в классе Ship:

@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() 

и внутри файла classes.py в классе GameScene я ставлю вне цикла в то время:

myriadProFont = pygame.font.SysFont('Myriad Pro', 30) 

и внутри время цикла:

show_score = myriadProFont.render('Score: %s' %Ship.get_score(), 1, (255,255,255),None) 
screen.blit(show_score, (550,30)) 

Все это показывает мне оценку со значением 0 (или любым значением, которое я помещал в конструктор класса корабля в этой строке self.score = 0). Я знаю, что линия

classes.Ship.set_score += 50 

не может быть правильным, поскольку set_score является функцией, а не переменная, но после того, как около 30 попыток объединить эти элементы и ничего не обновляет счет, я просто не знаю, что еще сделать ,

ответ

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 

Это зависит от того, правильно ли вы используете свой класс корабля - что невозможно рассказать по фрагментам кода.

+0

Извините, Тони, оценка все еще не обновляется. Поскольку корабль - это экземпляр, а корабль - это класс, который я сделал некоторые настройки: – user3653835

+0

в методах в вашем классе self - это экземпляр - независимо от того, что вы также можете назвать своим экземпляр внешне. Я думаю, вам нужно выполнить некоторую отладку, есть ли атрибут оценки, фактически обновляющийся в вашем экземпляре? когда вы возвращаете ship.set_score(), что вы делаете с этим возвращаемым значением, так как neiter ваша или моя версия set_score возвращает что-либо. –

+0

Кажется, оценка не обновляется в моем экземпляре. Я не понимаю ваш последний вопрос: возвращаемое значение не сохраняется в set_score() и возвращается в get_score() и используется в «show_score = myriadProFont.render (« Оценка: % s '% ship.get_score(), 1, (255,255,255), None) "line? Любое значение, которое передается в конструкторе класса Ship (self.score =' value '), отображается и остается отображаемым независимо от того, что – user3653835

0

Я решил проблему по-другому: я удалил методы Ship.set_score() и Ship.get_score() и удалил их вызовы и удалил строку self.score = 0 из конструктора класса корабля. В моем PlayingGameScene класс я инициализируется переменная оценка:

score = 0 

вне цикла в то время, и внутри цикла, пока я определил условие, которое обновляет счет folowed от

score += 50 

и

show_score = myriadProFont.render('Score: ' +str(score), 1, (255,255,255),None) 
screen.blit(show_score, (520,30)) 

Спасибо за помощь, Тони!

Смежные вопросы