我正在使用吡游做一个简单的脚本,它只是移动一个矩形,但是方法move_ip似乎什么也不做(我遵循了在RealPython教程上找到的代码)。总之,我得到了一个类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不会对播放器的位置进行任何更改)
发布于 2022-01-01 18:07:59
这位球员经常在(SCREEN_WIDTH/2, SCREEN_HEIGHT/2)抽签
screen.blit(player.surf,(屏幕宽度/2,屏幕高度/2))
您必须将播放机拖到存储在rect属性中的位置。pygame.Surface.blit)的第二个参数可以是矩形。在这种情况下,矩形的左上角将用作blit的位置:
screen.blit(player.surf, player.rect)但是,如果您使用的是pygame.sprite.Sprite,那么您也应该使用pygame.sprite.Group.e.g:
player_group = pygame.sprite.Group(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_group.update(pressed_keys)
screen.fill((0, 0, 0))
player_group.draw(screen)
pygame.display.flip()https://stackoverflow.com/questions/70550193
复制相似问题