【发布时间】:2022-01-01 16:28:45
【问题描述】:
我正在使用 pygame 编写一个简单的脚本,它只是移动一个矩形,但 move_ip 方法似乎没有做任何事情(我遵循了在 RealPython tutorial 上找到的代码)。
综上,我得到了一个Player的类,如下:
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((75, 25))
self.surf.fill((255, 255, 255))
self.rect = self.surf.get_rect()
def update(self, pressed_k):
if pressed_k[K_UP]:
self.rect.move_ip(0, -5)
if pressed_k[K_DOWN]:
self.rect.move_ip(0, 5)
if pressed_k[K_LEFT]:
self.rect.move_ip(-5, 0)
if pressed_k[K_RIGHT]:
self.rect.move_ip(5, 0)
然后我得到了前面描述的类的一个实例player,在循环中使用,如下:
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
screen.fill((0, 0, 0))
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
pygame.display.flip()
当我运行代码时,它会正确创建窗口(显示一个白色矩形,代表播放器),并且程序似乎读取了键盘输入,但代表播放器的块没有进行任何移动。
(实例方法.update被正确调用,各种'if'语句也正常工作,但亲戚self.rect.move_ip不会对玩家的位置做任何改变)
【问题讨论】:
-
你不要在任何地方使用
player.rect,尝试将它传递给screen.blit的调用 -
...
screen.blit(player.surf, player.rect) -
知道了,现在可以了。谢谢!
标签: python python-3.x pygame