问题描述
所以我在 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))