Pygame开发点击类游戏时Game类self.money变量无法更新问题求助
问题原因
- 核心问题出在最外层的
while True循环逻辑:每次循环都调用Game()创建一个全新的Game类实例,每次实例化都会自动执行__init__初始化方法,因此self.money = 0的逻辑会被反复执行,上一次循环里修改的数值会被完全覆盖。 - 次要问题:当前设置的
self.moneyperclick = 0,就算变量正常更新,每次点击加的数值也是0,看不到数值变化,需要调整为对应点击收益值。
修正后的代码
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 = 1 # 可自行调整每次点击的收益值 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() # 移出事件循环,保证每次循环都刷新界面 # 只创建一次Game实例,所有循环都复用该实例保留属性修改结果 game = Game() while True: game.mainloop()
补充说明
- 类的实例只需要初始化一次即可,后续所有操作都在同一个实例上执行,才能保留实例属性的修改结果。
- 界面刷新操作
pygame.display.update()建议放在事件遍历循环外,避免只有触发事件时才刷新界面的问题。
内容的提问来源于stack exchange,提问作者Happyface456
相关产品推荐
相关产品推荐

