【问题标题】:How to make game character (user) move smooth?如何让游戏角色(用户)动作流畅?
【发布时间】:2020-05-31 02:34:58
【问题描述】:

在我的游戏中,我设置了我的角色移动。它是如何设置的:

if game_over_state == False:
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_ESCAPE:
            pause = True
            game_paused()
        if event.key == pygame.K_LEFT:
            player_x_change = -2
        if event.key == pygame.K_RIGHT:
            player_x_change = 2
        if event.key == pygame.K_UP:
            player_y_change = -2
        if event.key == pygame.K_DOWN:
            player_y_change = 2

    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT
            player_x_change = 0
        if event.type == pygame.KEYUP:
            player_y_change = 0

这是一种将其更改为 while 函数或其他方式的方法,以便在释放箭头键时角色不会停止移动(即使按下另一个箭头键)?

【问题讨论】:

  • 现在的工作原理是,如果您按住右箭头键和向下箭头键并释放其中一个,那么播放器将完全停止 - 即使另一个键被按住

标签: python python-3.x pygame pycharm


【解决方案1】:

问题是event.type == pygame.KEYUP 中的条件。

if event.type == pygame.KEYUP:
   # [...]    

   if event.type == pygame.KEYUP:
        player_y_change = 0

只需重置player_x_changeplayer_y_change,具体取决于释放的密钥:

if game_over_state == False:
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_ESCAPE:
            pause = True
            game_paused()
        if event.key == pygame.K_LEFT:
            player_x_change = -2
        if event.key == pygame.K_RIGHT:
            player_x_change = 2
        if event.key == pygame.K_UP:
            player_y_change = -2
        if event.key == pygame.K_DOWN:
            player_y_change = 2

    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT
            player_x_change = 0
        if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
            player_y_change = 0

如果您想同时处理按键,这意味着您希望在按下 2 个键时移动播放器对角线并且您不希望播放器在释放 1 个键时停止,那么我建议使用 @ 987654321@ 而不是KEYDOWN 事件:

for event in  in pygame.event.get():
    if game_over_state == False:
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                pause = True
                game_paused()

if game_over_state == False:

    keys = pygame.key.get_pressed()

    player_x_change, player_y_change = 0, 0
    if keys[pygame.K_LEFT]:
        player_x_change -= 2
    if keys[pygame.K_RIGHT]:
        player_x_change += 2
    if keys[pygame.K_UP]:
        player_y_change -= 2
    if keys[pygame.K_DOWN]:
        player_y_change += 2

【讨论】:

  • 我的问题可能表述得不好,但这会使玩家不断地朝按下的键的方向浮动,直到按下另一个键并朝那个方向浮动——永远无法停止移动。有没有办法像 while event.key == pygame.K_LEFT player_y_change = -2 我尝试过这样的事情,但它冻结了整个程序@Rabbid76
  • @Mokoisa 是的,当然,我认为这就是你想要的。你问了 "[...],所以当释放箭头键 [...]" 时角色不会停止移动。释放键时字符停止或不停止。我看不出任何其他可能性。
  • 我对穷人提出的问题不好。我所讨论的是如何上下移动,释放右键,停止向右移动但继续向上移动。现在它是如何在两个方向停止的。但没关系,我通过查看您在第一次回复中评论的内容发现了问题。上下是错误的 - if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT player_x_change = 0 if event.type == pygame.KEYUP: player_y_change = 0 谢谢 :)
  • @Mokoisa 我已经改变了答案。我提供了 2 个解决方案,它们都应该适合你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
相关资源
最近更新 更多