首页 > 解决方案 > 玩家在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()

标签: pythonpygame

解决方案


不要在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))

推荐阅读