python - 如何让游戏角色(用户) Action 流畅?

标签 python python-3.x pygame pycharm

在我的游戏中,我已将角色设置为移动。它的设置方式是:

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 函数或其他函数,以便在释放箭头键时角色不会停止移动(即使按住另一个箭头键)?

最佳答案

问题是 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 个键时停止,那么我建议使用 pygame.key.get_pressed()而不是 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

关于python - 如何让游戏角色(用户) Action 流畅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60240802/

相关文章:

python - 如何将名称与列表中的公共(public)元素合并?

python-3.x - 使用 kmeans (sklearn) 对新文本进行预测?

python - Pandas value_count where 行名称

python - 是否可以在 python 中向导入的类添加属性?

python - 我如何检测pygame中的碰撞?

python - 获取数学域错误,但这不是因为负值

python - 无法在 Python 3 中打印生成器表达式

python - 模块 'cv2.cv2' 没有属性 'face'

python - Python并行编程中Pool.map和Process有什么区别?

regex - Python-正则表达式语法。查找字符串,删除部分并返回结尾