Pygame'DIsplay mode not set'?

Pygame 'DIsplay mode not set'?

我(尝试)创建一个游戏菜单并将我的 GameLoop 放在 Class = Menü 中。当我尝试启动代码时,它会突出显示行 pygame.display.update() 并告诉我:Display mode not set.

Class Menü(Highscore):

    def __init__(self):
        Highscore.__init__(self)
        #Fenster erstellen
        self.fenster_height = 1000  # Fensterhöhe definieren
        self.fenster_width = 600  # Fensterbreite definieren
        self.screen = pygame.display.set_mode((self.fenster_height, self.fenster_width))
        self.run = True
        #self.start_img = self.image.load('pong_test.png').convert_alpha()  # Bild für start_img ausw#hlen
        #self.quit_img = self.image.load('pong_test.png').convert_alpha()
        #self.auslesen = Highscore.readHS()

        pygame.display.set_caption('Spielekiste')
        #pygame.start_img = pygame.image.load('pong_test.png').convert_alpha()
        #pygame.quit_img = pygame.image.load('pong_test.png').convert_alpha()
        #self.screen.fill((96, 144, 189))  # Screen mit Farbe (255,255,255) füllen

    def runMenü(self):


        while True:  # Während "run = TRUE"
            for event in pygame.event.get():
                       # fenster schließen
                if event.type == pygame.QUIT:

                    pygame.quit()
                if event.type == pygame.MOUSEBUTTONDOWN:
                    print('test')

            pygame.display.update()  # Fenster wird aktualisiert
menu = Menü

menu.runMenü(menu)

首先,为了在 python 中创建一个 class,我们使用了 class 关键字,而在您的代码中,您使用了 Class 这个词,这将引发错误,因为它不是 python.

中的关键字

所以将这一行:Class Menü(Highscore): 替换为这一行:class Menü(Highscore):

现在要解决您的问题,请参阅 this answer。基本上,有两种方法可以防止出现错误:

第一种方式

run = True
while run:  # Während "run = TRUE"
    for event in pygame.event.get():
               # fenster schließen
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            print('test')

    pygame.display.update()  # Fenster wird aktualisiert

pygame.quit()

在您当前的游戏循环中(runMenü 函数内的 while 循环),当 pygame.QUIT 事件被触发时,您会立即退出程序而不停止您的游戏循环。因此,如果您将 runMenü 函数中的代码替换为我编写的代码,您将不会收到错误。

第二种方式

while True:  # Während "run = TRUE"
    for event in pygame.event.get():
               # fenster schließen
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit(0)
        if event.type == pygame.MOUSEBUTTONDOWN:
            print('test')

    pygame.display.update()  # Fenster wird aktualisiert

在这里,我在使用pygame.quit()退出pygame后退出程序。这样,您的程序就不会抛出错误,因为我用 sys.exit(0) 终止了它。不要忘记在代码顶部添加 import sys(在 import pygame 下)。

我个人会使用第一种方法,因为它停止循环然后终止程序,我认为这种方法更好。

修改后的代码:

import pygame
pygame.init()

class Menü(Highscore):
    def __init__(self):
        Highscore.__init__(self)
        #Fenster erstellen
        self.fenster_height = 1000  # Fensterhöhe definieren
        self.fenster_width = 600  # Fensterbreite definieren
        self.screen = pygame.display.set_mode((self.fenster_height, self.fenster_width))
        self.run = True
        #self.start_img = self.image.load('pong_test.png').convert_alpha()  # Bild für start_img ausw#hlen
        #self.quit_img = self.image.load('pong_test.png').convert_alpha()
        #self.auslesen = Highscore.readHS()

        pygame.display.set_caption('Spielekiste')
        #pygame.start_img = pygame.image.load('pong_test.png').convert_alpha()
        #pygame.quit_img = pygame.image.load('pong_test.png').convert_alpha()
        #self.screen.fill((96, 144, 189))  # Screen mit Farbe (255,255,255) füllen

    def runMenü(self):
        run = True
        while run:  # Während "run = TRUE"
            for event in pygame.event.get():
                       # fenster schließen
                if event.type == pygame.QUIT:
                    run = False
                if event.type == pygame.MOUSEBUTTONDOWN:
                    print('test')

            pygame.display.update()  # Fenster wird aktualisiert

        pygame.quit()


menu = Menü()
menu.runMenü()