python - 玩家在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))
推荐阅读
- javascript - Flask SocketIO Emit with broadcast=true 不会向发送者发送消息
- java - 从文件中获取整数值到数组
- c# - 我怎样才能让我的角色在移动时跳来跳去?
- mysql - 如何在 sequlize 中创建类似于 mysql 数据类型的列?
- python - 耦合方程组 - 来自 scipy 的 fsolve 的错误答案
- reactjs - React.js:调用 API 时在 index.js 上使用覆盖微调器
- c++ - 传递抽象 X 的子类的对象,并实例化抽象 X 的子类类型的字段
- javascript - 隐藏一个当没有给定条件时
- javascript - Discord.js 另一个嵌入的嵌入反应
- java - 无法正确拆分子字符串以进行编辑