You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:06:03