Вопрос или проблема
(https://i.sstatic.net/JpG6N8l2.png)
Я работал над своим проектом в pygame и пошел на ужин. Я использую pycharm и просто закрыл крышку ноутбука, когда пошел на ужин, и когда вернулся, сделав незначительные изменения в коде, на экране, как на фотографии, снова показывалось это окно, каждый раз, когда я запускал код. Я отменил все изменения, которые мог бы сделать и которые могли бы это вызвать, но это все еще происходит. Внизу есть одно изображение, а вверху экрана вращается большая половина этого изображения, и есть счётчик FPS в заголовке. У меня нет представления, что происходит, и когда я закрываю это окно, код, похоже, работает нормально, и фактическое окно pygame, которое я закодировал, открывается.
main.py:
import pygame
import classes
pygame.init()
# часы для управления частотой кадров
clock = pygame.time.Clock()
FPS: int = 60
# установка фона для удаления следов спрайта
background_colour = (250, 95, 85)
def bgColour() -> None:
screen.fill(background_colour)
# создание окна
sw: int = 800
sh: int = 800
screen = pygame.display.set_mode((sw, sh))
pygame.display.set_caption('Сказание о Дивали')
# персонажи
ram = classes.Character(350, 250, 0.1)
# игровой цикл
run: bool = True
move_left: bool = False
move_right: bool = False
move_up: bool = False
move_down: bool = False
while run:
clock.tick(FPS)
bgColour()
screen.blit(ram.sprite, ram.rect)
ram.move(move_left, move_right, move_up, move_down)
# обработка событий
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# обнаружение, нажата ли клавиша
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
move_left = True
if event.key == pygame.K_d:
move_right = True
if event.key == pygame.K_w:
move_up = True
if event.key == pygame.K_s:
move_down = True
# обнаружение, когда клавиша отпущена
if event.type == pygame.KEYUP:
if event.key == pygame.K_a:
move_left = False
if event.key == pygame.K_d:
move_right = False
if event.key == pygame.K_w:
move_up = False
if event.key == pygame.K_s:
move_down = False
# if player.x <= 0:
# player.x = 0
# elif player.x >= 750:
# player.x = 750
# if player.y <=0:
# player.y = 0
# elif player.y >=750:
# player.y = 750
pygame.display.update()
pygame.quit()
classes.py:
import pygame
from pygame.examples.sprite_texture import sprite
class Character(pygame.sprite.Sprite):
def __init__(self, x, y, scale, speed=5):
pygame.sprite.Sprite.__init__(self)
self.speed = speed
sprite = pygame.image.load('sprites/ram/trial.png')
self.sprite = pygame.transform.scale(sprite,
(int(sprite.get_height() * scale), int(sprite.get_width() * scale)))
self.rect = self.sprite.get_rect()
self.rect.center = (x, y)
def move(self, moving_left: bool, moving_right: bool, moving_up: bool, moving_down: bool) -> None:
# значения, которые определяют, на сколько игрок движется
deltaX = 0
deltaY = 0
# изменяем deltaX и deltaY на соответствующее значение
if moving_left:
deltaX = -self.speed
if moving_right:
deltaX = self.speed
if moving_up:
deltaY = self.speed
if moving_down:
deltaY = -self.speed
self.rect.x += deltaX
self.rect.y += deltaY
# class hero(Character):
# def __init__(self, x, y, scale, speed=5):
# super().__init__(self, x, y, scale, speed = 5)
#
# # предотвращает выход игрока за пределы главного игрового окна
# def in_window(self):
# self.width = sprite.get_width()
# self.height = sprite.get_height()
# if self.x <= 0:
# self.x = 0
# elif self.x >= int(350 - self.width):
# self.x = int(350 - self.width)
# if self.y <= 0:
# self.y = 0
# elif self.y >= int(350 - self.height):
# self.y = int(350 - self.height)
Я закомментировал весь код, который я недавно добавил, я удалил файл, который скачал, не думаю, что он был связан с файлом, потому что он был из надежного источника.
Я ожидал, что моё основное окно pygame откроется сразу, а не это странное окно.
Ответ или решение
Вопрос о наличии "странного экрана" с красным фоном и непонятным изображением в вашем проекте на Pygame после выхода из режима сна вашего ноутбука является достаточно распространенной проблемой, которую можно решить с помощью нескольких шагов. Давайте разберем ситуацию подробно.
Описание проблемы
После того как вы оставили ноутбук в режиме сна, при запуске вашего кода появилось нечто иное, нежели ожидалось. Судя по описанию, на экране отображается красный фон с изображением в нижней части и вращающимся изображением в верхней части, а также присутствует счетчик кадров в секунду в заголовке окна. Важно отметить, что когда вы закрываете это окно, код продолжает свою работу, и появляется основной экран игры, который вы задали в коде.
Возможные причины проблемы
-
Неправильная инициализация Pygame: Возможно, после выхода из спящего режима библиотека Pygame требует перезагрузки. К этому могут привести временные сбои в работе графического интерфейса.
-
Кэширование текста или изображений: Pygame может сохранять кэш изображений. Проблема может заключаться в том, что изображение, которое вы пытаетесь загрузить, некорректно кэшируется.
-
Проблемы с графическим драйвером: Возможно, после режима сна графические драйверы вашего компьютера нуждаются в обновлении или сбросе.
Способы решения
-
Перезагрузка Pygame: Попробуйте полностью завершить программу и заново запустить Pygame. Также рекомендуется перезагрузить компьютер. Это поможет сбросить состояния и очистить кэш.
-
Проверка кодов: Ваш код выглядит корректным на первый взгляд, однако убедитесь, что на всех путях к изображению указаны актуальные адреса. Возможно, файл
trial.png
не был загружен должным образом. -
Обновление графического драйвера: Убедитесь, что у вас установлены последние версии графических драйверов. Это можно сделать через сайт производителя вашей видеокарты или через диспетчер устройств Windows.
-
Использование обработчиков событий: Убедитесь, что при выходе из режима сна ваш код правильно обрабатывает события Pygame. Применение временной задержки между инициализацией и основным циклом игры может помочь избежать таких сбоев. Например:
import time
time.sleep(1) # Задержка на 1 секунду
- Чистка кэша Pygame: Возможно, стоит явно указать Pygame очистить все кэшируемые ресурсы. Перезапустите визуализацию после всех обновлений.
Заключение
Проблема, которую вы описали, часто может быть решена посредством простых шагов. Убедитесь, что ваш код написан корректно и не содержит лишних ошибок. Если неполадки продолжаются даже после указанных мероприятий, возможно, стоит попробовать запустить проект на другом устройстве или даже переустановить Pygame.
Если проблема сохраняется, вам может понадобиться обратиться к сообществу разработчиков Pygame с полным описанием вашей проблемы и подробностями о среде выполнения. Это может помочь вам найти дополнительные решения.