我正在 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()
代码!这是一个常见问题,我相信还有其他帖子对此进行了讨论。尽管如此,我还是会帮助你。
渲染每一帧时,Pygame 并不清除之前的内容。相反,它只是在其上创建图像。在这种情况下,我相信你画出了你的玩家和你的迷宫。
例如,您从黑屏开始,然后绘制玩家和迷宫。然后,您绘制了更新后的玩家位置和相同的迷宫。因此,由于黑屏没有被重绘,我们也可以看到前一帧。
解决方案?一个简单的
screen.fill((0,0,0))
就可以了。将其放入您的游戏循环中。
编码快乐!