玩家在 pygame 中移动不顺畅

问题描述

所以我在 pygame 中制作了这个游戏,我希望玩家移动并且它移动但不是我想要的方式。它有点传送然后恢复正常行走,然后再次传送等等。

>

这是现在的代码

import pygame

pygame.init()

screen = pygame.display.set_mode((1000,1000))
clock = pygame.time.Clock()


playerX = 100
playerY = 100

def ecranAlb():
    WHITE = [255,255,255]
    screen.fill(WHITE)
    
def player():
    global playerX,playerY
    playerImg = pygame.image.load('knight.png')
    playerImg = pygame.transform.scale(playerImg,(250,150))
    screen.blit(playerImg,(playerX,playerY))
    
    vel = 10

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        playerX -= vel
    if keys[pygame.K_RIGHT]:
        playerX += vel
    if keys[pygame.K_UP]:
        playerY -= vel
    if keys[pygame.K_DOWN]:
        playerY += vel





running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    ecranAlb()
    player()
    clock.tick(200)
    pygame.display.flip()

解决方法

不要在 player 函数中加载图像。 pygame.image.load 会导致延迟,因为它非常耗时。在初始化期间加载一次图像,并在函数内部使用加载的图像。

确保图像Surface与显示Surface具有相同的格式。使用 convert()(或 convert_alpha())创建具有相同像素格式的 Surface。当图像在显示器上显示 blit 时,这会提高性能,因为格式是兼容的,并且 blit 不需要执行隐式转换。

playerImg = pygame.image.load('knight.png').convert_alpha()
playerImg = pygame.transform.scale(playerImg,(250,150))
vel = 10

def player():
    global playerX,playerY
    
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        playerX -= vel
    if keys[pygame.K_RIGHT]:
        playerX += vel
    if keys[pygame.K_UP]:
        playerY -= vel
    if keys[pygame.K_DOWN]:
        playerY += vel

    screen.blit(playerImg,(playerX,playerY))