我无法在pygame中移动精灵

时间:2020-10-01 19:48:27

标签: python pygame

在这段代码中,我首先尝试使名为“ player”的精灵在屏幕上移动。它根本不动。我查看了关于同一问题的其他问题,但是它们大多存在一些问题,这些问题是由于诸如未执行主循环之类的事情引起的。这是代码。

import pygame
from pygame.locals import (
    K_UP,
    K_DOWN,
    K_LEFT,
    K_RIGHT,
    KEYDOWN,
    QUIT,
)
print('Use the window above to play')
pygame.init()
clock = pygame.time.Clock()

display_width = 800
display_height = 600
screen = pygame.display.set_mode((display_width,display_height))

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super(Player, self).__init__()
        self.surf = pygame.Surface((75, 25))
        self.surf.fill((0, 0, 0))
        self.rect = self.surf.get_rect()
player = Player()

def update(self, pressed_keys):
    if pressed_keys[K_UP]:
        self.rect.move_ip(0, -5)
    if pressed_keys[K_DOWN]:
        self.rect.move_ip(0, 5)
    if pressed_keys[K_LEFT]:
        self.rect.move_ip(-5, 0)
    if pressed_keys[K_RIGHT]:
        self.rect.move_ip(5, 0)

alive = True
while alive:
    for event in pygame.event.get():
        print(event)
        if event.type == pygame.QUIT:
            alive = False

    pressed_keys = pygame.key.get_pressed()
    player.update(pressed_keys)

    screen.fill((200,200,200))

    screen.blit(player.surf, (display_height/6, display_width/2))

    pygame.display.flip()

    pygame.display.update()
    clock.tick(60)

1 个答案:

答案 0 :(得分:3)

updatePlayer的一种方法。修复Indentation。在课程之后创建palyer的实例。

您必须在player.rect而不是(display_height/6, display_width/2)处绘制播放器:

screen.blit(player.surf, (display_height/6, display_width/2))

screen.blit(player.surf, player.rect)

(display_height/6, display_width/2)是上层的初始位置:

class Player(pygame.sprite.Sprite):
    def __init__(self, x, y):
        # [...]

        self.rect = self.surf.get_rect(topleft = (x, y))
player = Player(display_width // 2, display_height // 2)

查看完整的示例:

import pygame
from pygame.locals import (
    K_UP,
    K_DOWN,
    K_LEFT,
    K_RIGHT,
    KEYDOWN,
    QUIT,
)
print('Use the window above to play')
pygame.init()
clock = pygame.time.Clock()

display_width = 800
display_height = 600
screen = pygame.display.set_mode((display_width,display_height))

class Player(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super(Player, self).__init__()
        self.surf = pygame.Surface((75, 25))
        self.surf.fill((0, 0, 0))
        self.rect = self.surf.get_rect(topleft = (x, y))

    def update(self, pressed_keys):
        if pressed_keys[K_UP]:
            self.rect.move_ip(0, -5)
        if pressed_keys[K_DOWN]:
            self.rect.move_ip(0, 5)
        if pressed_keys[K_LEFT]:
            self.rect.move_ip(-5, 0)
        if pressed_keys[K_RIGHT]:
            self.rect.move_ip(5, 0)

player = Player(display_width // 2, display_height // 2)
alive = True
while alive:
    for event in pygame.event.get():
        print(event)
        if event.type == pygame.QUIT:
            alive = False

    pressed_keys = pygame.key.get_pressed()
    player.update(pressed_keys)

    screen.fill((200,200,200))

    screen.blit(player.surf, player.rect)

    pygame.display.flip()

    pygame.display.update()
    clock.tick(60)
相关问题