Sprite Объект не отображается на дисплее (Pygame)? - PullRequest
2 голосов
/ 17 января 2020

В настоящее время я пытаюсь разработать небольшую, основную c игру с использованием Pygame. Тем не менее, я не могу нарисовать мой спрайт объект на экране. Мой код ниже:

import pygame

# window
WIDTH = 400
HEIGHT = 400
FPS = 60

# colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
PINK = (255, 0, 191)
BROWN = (102, 51, 0)
GRAY = (102, 102, 51)

# player

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50,50))
        self.image.fill(GREEN)

        # variables needed for movement
        self.rect = self.image.get_rect()
        self.rect.centerx = 200
        self.rect.bottom = 200
        self.speedx = 0
        self.speedy = 0

    def update(self):
        # move sprite
        self.speedx = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_w]:
            self.speedx = -5
        if keystate[pygame.K_d]:
            self.speedx = 5
        self.rect.x += self.speedx

        # boundary collision
        if self.rect.x < 0:
            self.rect.x = 0
        elif self.rect.x < 400:
            self.rect.x = 400


# initialisation
pygame.init()

# sound
pygame.mixer.init()

# draw window
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Shoot")
clock = pygame.time.Clock()

# sprite group
all_sprites = pygame.sprite.Group()

# create player
player = Player()

# add sprites to sprite group
all_sprites.add(player)

# game loop

running = True
while running:
    # keeps speed constant
    clock.tick(FPS)
    # allows for exit
    for event in pygame.event.get():
        # check before closing window
        if event.type == pygame.QUIT:
            running = False

    # update sprites
    all_sprites.update()

    # draw screen
    #screen.fill(BLACK)
    all_sprites.draw(screen)
    #player.draw(screen)
    # used to draw
    pygame.display.flip()

pygame.quit()

Как видно из кода, у меня есть объект player, который я создаю из класса Player. Затем я добавляю это в группу all_sprites. Это должно быть нарисовано на экране. Однако ничего не нарисовано

1 Ответ

1 голос
/ 17 января 2020

Проблема в том, что прямоугольник объекта Player находится вне окна из-за if self.rect.x < 400: self.rect.x = 400 in:

class Player(pygame.sprite.Sprite):
   # [...]

   def update(self):
       # [...]

       if self.rect.x < 0:
           self.rect.x = 0
       elif self.rect.x < 400:
           self.rect.x = 400

Это должно быть self.rect.x > 400 :

class Player(pygame.sprite.Sprite):
    # [...]

    def update(self):
        # [...]

        if self.rect.x < 0:
            self.rect.x = 0
        elif self.rect.x > 400: # <----
            self.rect.x = 400
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...