在这段代码中,我首先尝试使名为“ 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)
答案 0 :(得分:3)
update
是Player
的一种方法。修复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)