#python #pygame
Вопрос:
import sys import pygame from pygame.locals import * pygame.init() class Game: def __init__(self): self.width = 800 self.height = 900 self.win = pygame.display.set_mode([self.width, self.height]) self.caption = pygame.display.set_caption('Clicker Game','Game') self.money = 0 self.moneyperclick = 0 def moneytracker(self): self.money = self.money self.moneyperclick print(self.money) def mousestuff(self): self.mousepos = pygame.mouse.get_pos() self.clicked = pygame.mouse.get_pressed() def mainloop(self): self.mousestuff() for event in pygame.event.get(): if event.type == MOUSEBUTTONDOWN: self.moneytracker() if event.type == QUIT: pygame.quit() sys.exit() pygame.display.update() while True: Game().mainloop()
Я все еще немного новичок в кодировании, но я очень смущен тем, почему self.money
переменная не обновляется, хотя я призываю ее обновить. Я провел несколько тестов и знаю, что он зацикливает код там, где я его установил self.money = 0
, но я не знаю, как это обойти. Спасибо
Ответ №1:
Похоже, проблема здесь:
while True: Game().mainloop()
Это создает новый Game
объект на каждой итерации цикла, что означает, что все значения инициализируются в первый раз, потому что это новый объект.
Альтернативы заключаются в том , чтобы переместить while True
петлю внутрь mainloop()
или попробовать что-то вроде:
game = Game() while True: game.mainloop()
Это создает один Game
объект as game
, mainloop()
метод которого вызывается повторно. Поскольку объект создается только один раз, атрибуты объекта (например money
, доступ как self.money
), измененные в результате действий игрока, будут сохранять свои значения между итерациями цикла.
В исходной структуре цикла Game
каждый раз создавался новый объект, что означает, что действия игрока выполнялись только один раз, прежде чем объект был оставлен и заменен новым, с новыми инициализированными атрибутами.
Комментарии:
1. Можете ли вы объяснить, почему игра = Game() при истинности: game.mainloop() на самом деле работает?
2. @Happyface456: Я добавил еще несколько деталей