rickhot3 2025-02-01 23:45 采纳率: 0%
浏览 5
已结题

用pygame制作游戏出现了类方法的异常调用

import pygame , sys
 
state = 0
 
class GameCore:
 
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((1600,1000))
 
    def screen_update(self):
        self.screen.fill((0,0,0))
        pygame.display.update()
 
    def run_menu(self):
        while True:
            self.screen_update()
            self.monitor()
 
    def monitor(self):
 
        for e in pygame.event.get():
            if e.type == pygame.QUIT :
                pygame.quit()
                sys.exit()
            elif e.type == pygame.KEYDOWN and e.type == pygame.K_SPACE:
                global state
                state = 1
 
class GamePlay(GameCore):
 
    def screen_update(self):
        self.screen.fill((255,255,255))
        pygame.display.update()
 
    def run_game(self):
        while True:
            self.screen_update()
            self.monitor()
 
class GameState:
 
    def run(self):
 
        while True:
            print(state)
 
 
if __name__ == '__main__':
    game_core = GameCore()
    game_play = GamePlay()
    game_state = GameState()
    game_state.run()

  • 如图,在GameState类里的run方法根本没调用其他类中的run_game,run_menu等方法,但运行程序会出现run_menu方法的运行效果,这是什么情况??请问有大师能帮我找下问题吗,我正在学习用pygame制作游戏
  • 我原本期望通过改变state状态量的值来让run方法循环不同的方法,预期的run()方法如下,但现在问题是

1.下方的代码不能预期地通过改变state的值进入不同的循环
2.上方的代码莫名运行了根本不在run()方法内的一些程序



class GameState:
    def run(self):
 
        while state == 0:
             game_core.run_menu()
        while state == 1:
            game_play.run_game()
            

请问能否帮忙解决,指点我存在的问题和误解,谢谢分享

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2025-02-01 23:45
    关注

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    在PYTHON中,PYGAME库使用SYS模块来获取当前系统环境的上下文信息。当一个类被实例化时,它会调用__INIT__函数,并传递一个参数STATE。因此,如果__INIT__函数没有正确地调用,那么类方法的异常调用就会发生。

    解决这个问题的方法是:

    1. 在你的类定义中,确保__INIT__函数有一个正确的初始化语句。
    2. 确保你已经正确地导入了PYGAMESYS模块。
    3. 如果你在初始化时没有提供STATE参数,那么__INIT__函数将会抛出一个ATTRIBUTEERROR异常。

    如果你需要进一步的帮助,请告诉我!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月2日
  • 修改了问题 2月1日
  • 创建了问题 2月1日