pygame 玩家在移动时不断在屏幕上绘制自己

问题描述 投票:0回答:1

我正在 pygame 中制作一个游戏,我从之前的游戏中复制并粘贴了我的 Player 类,但是当玩家移动时,它会留下痕迹,但在我之前复制和粘贴的游戏中并没有这样做。 这是玩家类别:

class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
    pygame.sprite.Sprite.__init__(self)
    self.speed = 7
    self.frames = []
    self.index = 0
    for num in range(1, 4):
        img = pygame.image.load(f'hunter/img/player/player{num}.png')
        img.convert()
        img = pygame.transform.scale(img, (75, 75))
        self.frames.append(img)
    self.player = self.frames[self.index]
    self.rect = self.player.get_rect()
    self.rect.center = (x, y)
def update(self):
    # movement
    dx = 0
    dy = 0

    keys = pygame.key.get_pressed()
    if keys[pygame.K_w]:
        dy -= self.speed
    if keys[pygame.K_s]:
        dy += self.speed
    if keys[pygame.K_a]:
        dx -= self.speed
    if keys[pygame.K_d]:
        dx += self.speed

    self.rect.x += dx
    self.rect.y += dy
    # collison check
    if (self.rect.left) + 24 < 0:
        self.rect.left = -24
    if (self.rect.right) - 24 > 1024:
        self.rect.right = 1024 + 24
    if (self.rect.top) + 24 < 0:
        self.rect.top = -24
    if (self.rect.bottom) - 24 > 512:
        self.rect.bottom = 512 + 24

    # shoot
        
    display.blit(self.player, self.rect)

这是主游戏循环:

player = Player(200, 200)
world = Tile(getTilemap('map1.txt'))


while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    player.update()
    world.draw()

    pygame.display.flip()
    CLOCK.tick(60)
pygame.quit()

在我按键盘上的 d 之前

按 d 后

python pygame game-development
1个回答
0
投票

代码!这是一个常见问题,我相信还有其他帖子对此进行了讨论。尽管如此,我还是会帮助你。

渲染每一帧时,Pygame 并不清除之前的内容。相反,它只是在其上创建图像。在这种情况下,我相信你画出了你的玩家和你的迷宫。

例如,您从黑屏开始,然后绘制玩家和迷宫。然后,您绘制了更新后的玩家位置和相同的迷宫。因此,由于黑屏没有被重绘,我们也可以看到前一帧。

解决方案?一个简单的

screen.fill((0,0,0))
就可以了。将其放入您的游戏循环中。

编码快乐!

© www.soinside.com 2019 - 2024. All rights reserved.