Не могу переключиться между полноэкранным и оконным режимом в Pygame - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь изучить python, создавая небольшую видеоигру с использованием pygame, и когда я решил изменить весь свой код на ООП, все перестало работать. Я много чего перепробовал, дважды менял весь шаблон дизайна и все еще не работал.

Теперь я сократил свой код до минимальной стадии и все еще не могу найти, где я не прав

Можете ли вы, люди, помочь мне?

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()

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Ааа ... Это просто. Вы должны переместить свою линию:

    keys = pygame.key.get_pressed()

Внутри пока цикл self._run:)

Например:

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()
0 голосов
/ 12 января 2019

Проблема в том, что вы читаете ключи только один раз в начале. Вы должны делать это снова и снова внутри основного цикла. См. Изменения, указанные в комментариях ALL 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...