Спрайты не отображаются в Pygame - PullRequest
3 голосов
/ 18 марта 2019

Я не уверен, что я делаю здесь не так. Ошибок не появляется, но при загрузке игры ничего не появляется, только черный фон. Это код, который я запускаю для загрузки своего спрайта в игру.

import pygame
import sys
import os
pygame.init()

"""
Spawn Player
"""

class Player(pygame.sprite.Sprite):
    pygame.display.set_mode()
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.images = []
        img = pygame.image.load(os.path.join("images", "ninja.jpeg")).convert()
        self.images.append(img)
        self.image = self.images[0]
        self.rect = self.image.get_rect()
    def Run(self):
        pygame.sprite.Sprite.__init__(self)
        self.images = []
        for i in range(1,5):
            run_img = pygame.image.load(os.path.join("run","ninja_run" + str(i) + ".jpeg")).convert()
            self.images.append(run_img)
            self.image = self.images[0]
            self.rect = self.image.get_rect()

"""
Setup
"""
worldx = 900
worldy = 700
fps = 40
ani = 4
clock = pygame.time.Clock()
world = pygame.display.set_mode([worldx, worldy])

player = Player()
player.rect.x = 32
player.rect.y = 32
player_list = pygame.sprite.Group()
player_list.add(player)

BLUE = (25, 25, 200)
BLACK = (20, 20, 20)
WHITE = (255, 255, 255)
RED = (200, 25, 25)
"""
Main Loop
"""
main = True
while main:
    pygame.time.delay(100)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
            break




    #world.blit(backdrop, backdrop_box)
    player_list.draw(world)
    world.fill(BLACK)
    pygame.display.flip()
    clock.tick(fps)

Я попросил друга просмотреть код, и он сказал, что есть проблема с init в классе проигрывателя, но, кроме того, я действительно не понимаю, где проблема в коде.

Окно вызывает правильно, и я получаю черный фон, но спрайт просто не загружается.

Я работаю с этим учебным пособием , чтобы спрайты появились. У меня уже есть движение среди других частей настройки, единственное, что, кажется, не работает, это код, вращающийся вокруг спрайтов.

Любая помощь здесь будет отличной.

1 Ответ

1 голос
/ 18 марта 2019

Вы делаете world.fill(BLACK) немедленно для pygame.display.flip().
world.fill(BLACK) заполняет всю поверхность окна черным цветом и покрывает все, что было нарисовано ранее.pygame.display.flip() обновляет окно.Это приводит к тому, что окно выглядит полностью черным.

Измените порядок инструкций для решения проблемы:

world.fill(BLACK) 
player_list.draw(world)
# world.fill(BLACK)      <---- delete
pygame.display.flip()
...