在pygam中无法在全屏模式和窗口模式之间切换

2024-04-25 22:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试学习python,用pygame创建一个小的视频游戏,当我决定把所有代码都改成OOP时,一切都停止了。我尝试了很多东西,我改变了我的整个设计模式两次,仍然没有工作。你知道吗

现在我把代码缩减到最小的阶段,仍然找不到错的地方

你们能帮帮我吗?你知道吗

import pygame
from pygame.locals import *


class App(pygame.sprite.Sprite):
    def __init__(self):
        self._WINDOW_WIDTH = 640
        self._WINDOW_HEIGHT = 480
        self._WINDOW_SIZE = (self._WINDOW_WIDTH, self._WINDOW_HEIGHT)
        self._BGIMAGE = pygame.image.load("resources/misrecursos/fondo.jpg")
        self.clock = pygame.time.Clock()
        self._TITLE = "Space Invades"

        self._run = True
        self._fullSC = False
        self._screen = None

    def mainloop(self):
        pygame.init()
        pygame.display.set_caption(self._TITLE)
        self._screen = pygame.display.set_mode(self._WINDOW_SIZE, 0, 32)
        keys = pygame.key.get_pressed()

        while self._run:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self._run = False
            if keys[K_ESCAPE]:
                self._run = False
            if keys[K_f]:
                self._screen = pygame.display.set_mode(self._WINDOW_SIZE, pygame.FULLSCREEN | pygame.HWSURFACE | pygame.DOUBLEBUF, 32)

            self._screen.blit(self._BGIMAGE, (0,0))
            pygame.display.update()
        pygame.quit()


if __name__ == "__main__":

    app = App()
    app.mainloop()

Tags: run代码importselfeventfalseappsize
2条回答

问题是你一开始只看了一次钥匙。你需要在主循环中反复做。请参见以下所有CAPS注释所示的更改:

import pygame
from pygame.locals import *


class App(pygame.sprite.Sprite):
    def __init__(self):
        self._WINDOW_WIDTH = 640
        self._WINDOW_HEIGHT = 480
        self._WINDOW_SIZE = (self._WINDOW_WIDTH, self._WINDOW_HEIGHT)
        self._BGIMAGE = pygame.image.load("resources/misrecursos/fondo.jpg")
        self.clock = pygame.time.Clock()
        self._TITLE = "Space Invades"

        self._run = True
        self._fullSC = False
        self._screen = None

    def mainloop(self):
        pygame.init()
        pygame.display.set_caption(self._TITLE)
        self._screen = pygame.display.set_mode(self._WINDOW_SIZE, 0, 32)
####### keys = pygame.key.get_pressed()  # <   NOT HERE!

        while self._run:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self._run = False
            keys = pygame.key.get_pressed()  # <   DOWN HERE INSIDE GAME LOOP.
            if keys[K_ESCAPE]:
                self._run = False
            if keys[K_f]:
                self._screen = pygame.display.set_mode(
                    self._WINDOW_SIZE,
                    pygame.FULLSCREEN | pygame.HWSURFACE | pygame.DOUBLEBUF, 32)

            self._screen.blit(self._BGIMAGE, (0,0))
            pygame.display.update()

        pygame.quit()


if __name__ == "__main__":

    app = App()
    app.mainloop()

啊。。。这很简单。 你应该移动你的线路:

    keys = pygame.key.get_pressed()

内部,而自己。\运行循环:)

例如:

def mainloop(self):
    pygame.init()
    pygame.display.set_caption(self._TITLE)
    self._screen = pygame.display.set_mode(self._WINDOW_SIZE, 0, 32)

    while self._run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self._run = False
        keys = pygame.key.get_pressed()
        if keys[K_ESCAPE]:
            self._run = False
        if keys[K_f]:
            self._screen = pygame.display.set_mode(self._WINDOW_SIZE, pygame.FULLSCREEN | pygame.HWSURFACE | pygame.DOUBLEBUF, 32)

        self._screen.blit(self._BGIMAGE, (0,0))
        pygame.display.update()
    pygame.quit()

相关问题 更多 >