【问题标题】:Character gets stuck / freezes in pygame角色在 pygame 中卡住/冻结
【发布时间】:2019-07-28 11:31:28
【问题描述】:

我正在尝试按照 youtube 上的教程使用 pygame(未完成)制作赛车游戏。代码工作得很好,除了当我按下箭头键并很快按下箭头键的反面时,赛车卡住了,直到我放开钥匙并再次按下钥匙。有什么办法可以解决吗?

import pygame

pygame.init()

display_width = 800
display_height = 600

black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)

gameDisplay = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('A bit Racey')
clock = pygame.time.Clock()


carImg = pygame.image.load('BlackCar.png')

def car(x, y):
    gameDisplay.blit(carImg, (x, y))

x = (display_width * 0.45)
y = (display_height * 0.8)

x_change = 0
y_change = 0

crashed = False

while not crashed:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x_change = -5
            if event.key == pygame.K_RIGHT:
                x_change = 5
            if event.key == pygame.K_UP:
                y_change = -5
            if event.key == pygame.K_DOWN:
                y_change = 5

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                x_change = 0
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                y_change = 0

    x += x_change
    y += y_change


    gameDisplay.fill(white)
    car(x, y)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quit()

【问题讨论】:

  • 好的,尝试删除 KEYUP 事件的代码,看看会发生什么,然后告诉我。为简洁起见,让我们删除上面的 cmets。
  • 您可以在KEYDOWNKEYUP 中使用x_change -= 5 x_change += 5,然后它应该会更好地工作。它会“累积两个箭头,并在您释放另一个箭头时“记住”前一个箭头。现在,当您释放第二个键时,它会设置 x_change = 0 并且它不会记住第二个键。
  • 还是不行

标签: python python-3.x pygame


【解决方案1】:

您可以在KEYDOWNKEYUP 中使用x_change -= 5x_change += 5

当你保持向左箭头时,它会向左移动,当你同时按下右箭头(同时按下)时它不会移动,但如果你释放其中一个箭头并仍然保持另一个,那么它会再次移动(以正确的方向)

while not crashed:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x_change -= 5
            if event.key == pygame.K_RIGHT:
                x_change += 5
            if event.key == pygame.K_UP:
                y_change -= 5
            if event.key == pygame.K_DOWN:
                y_change += 5

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                x_change += 5
            if event.key == pygame.K_RIGHT:
                x_change -= 5
            if event.key == pygame.K_UP:
                y_change += 5
            if event.key == pygame.K_DOWN:
                y_change -= 5

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2012-10-27
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多