我正在尝试使用pygame制作游戏,我需要一些角色来左右移动。为此,每次用户按住“向左”按钮时,我都会再次绘制背景图像,并在该字符的上一个位置的左侧向左绘制一个字符,当他按住“向右”按钮时,我将执行类似的操作。问题是图像加载速度不够快。例如,当我运行代码并按住“向左”按钮时,子画面确实会向左移动,但似乎消失了很短的时间(大约0.2秒),并且移动不是连续的(也就是说,子画面消失了) ,我的意思是有一段时间我可以“暂停”屏幕,只看到背景图像,而没有精灵。我希望运动是连续的,因为它现在看起来并不好。我试图更新我的时钟滴答,但要让精灵连续移动,它必须非常缓慢地移动,我也不想这样做。这是我的代码:
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x = x-vel
screen.blit(img, (0, 0))
pygame.display.flip()
screen.blit(ship_img, (x, y))
pygame.display.flip()
if keys[pygame.K_RIGHT]:
x = x + vel
screen.blit(img, (0, 0))
pygame.display.flip()
screen.blit(ship_img, (x, y))
pygame.display.flip()
(“ vel”是一个常数,在我的代码中,其值为5)
该如何解决?
我要制作的游戏是THIS,如果向下滚动,您会看到该家伙的飞船不断移动,因此有可能做到这一点。
答案 0 :(得分:0)
从您的问题表达方式来看,您似乎希望您的playerobject无缝移动。如果是这样的话,还有更好的方法去做!
首先为您的播放器对象在x轴上移动的速度创建一个变量。 如果您的playerobject被定义为一个类,请确保在声明之前将其称为self。
speedx = 0
此后,只需将speed变量更改为所需的任何数字,即可替换事件中的所有代码。
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
speedx = insert number here
这就是我通常的处理方式。希望对您有帮助!