Задать вопрос

Пишу игру на python на windows 10, по курсу и у меня выходит ошибка, как ее исправить?

Вот сама ошибка
Traceback (most recent call last):
  File "C:\Users\sobol\OneDrive\Рабочий стол\python\game\main.py", line 9, in <module>
    player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()
pygame.error: cannot convert without pygame.display initialized


А вот сам код
import pygame
import random
import os

# настройка папки ассетов
game_folder = os.getcwd()
img_folder = os.path.join(game_folder, 'img')
player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()

WIDTH = 800
HEIGHT = 650
FPS = 30

# Задаем цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)


class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = player_img
        self.image.set_colorkey(BLACK)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)
        
        
    def update(self):
        self.rect.x += 5
        if self.rect.left > WIDTH:
            self.rect.right = 0


# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

# Цикл игры
running = True
while running:
    # Держим цикл на правильной скорости
    clock.tick(FPS)
    # Ввод процесса (события)
    for event in pygame.event.get():
        # check for closing window
        if event.type == pygame.QUIT:
            running = False

    # Обновление
    all_sprites.update()
    
    # Рендеринг
    screen.fill(BLACK)
    all_sprites.draw(screen)
    # После отрисовки всего, переворачиваем экран
    pygame.display.flip()

pygame.quit()
  • Вопрос задан
  • 1943 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
@DollaR84
Вот эту строку:
player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()

Надо перенести после инициализации pygame и установки экрана.
Например сюда:
...
# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()
...


UPDATE
Код файла main.py:
import pygame
import random
import os
from player import *

# настройка папки ассетов
game_folder = os.path.dirname(__file__)
img_folder = os.path.join(game_folder, 'img')

WIDTH = 800
HEIGHT = 650
FPS = 30

# Задаем цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)


# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()
player = Player(player_img, BLACK, WIDTH, HEIGHT)
all_sprites = pygame.sprite.Group()
all_sprites.add(player)

# Цикл игры
running = True
while running:
    # Держим цикл на правильной скорости
    clock.tick(FPS)
    # Ввод процесса (события)
    for event in pygame.event.get():
        # check for closing window
        if event.type == pygame.QUIT:
            running = False

    # Обновление
    all_sprites.update()
    
    # Рендеринг
    screen.fill(BLACK)
    all_sprites.draw(screen)
    # После отрисовки всего, переворачиваем экран
    pygame.display.flip()

pygame.quit()

Код файла player.py:
import pygame
import random
import os


class Player(pygame.sprite.Sprite):
    def __init__(self, player_img, color, w, h):
        pygame.sprite.Sprite.__init__(self)
        self.image = player_img
        self.image.set_colorkey(color)
        self.rect = self.image.get_rect()
        self.w = w
        self.h = h
        self.rect.center = (self.w / 2, self.h / 2)

    def update(self):
        self.rect.x += 5
        if self.rect.left > self.w:
          self.rect.right = 0
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Sergomen
@Sergomen
Просто делай добро и оно вернётся
Попробуй pygame.init() перенести в самый верх(после импортов). Знакомому когда-то помогло
Ответ написан
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Может для начала разобраться как работает Python? Сначала должны быть "константы", потом инициализация... Скорее всего вы не знаете как работает Python и Pygame.
И вообще, у вас весь код вне методов. Вот отсюда и все проблемы. Почитайте что такое:
if __name__ == '__main__':
	main()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 21:10
1500 руб./за проект
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект