Вот эту строку:
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