gpt4 book ai didi

python - pygame.key.get_pressed()-不起作用-pygame.error : video system not initialized

转载 作者:行者123 更新时间:2023-12-03 08:13:50 26 4
gpt4 key购买 nike

我的程序有两个问题:

  • 关闭程序时出现错误:keys = pygame.key.get_pressed() pygame.error: video system not initialized
  • 当我按“d”键时以及当我按某些东西(或移动鼠标)时,Square移动

    代码的重要部分是:
    import pygame
    from pygame.locals import*

    pygame.init()

    screen = pygame.display.set_mode((1200, 700))
    ticket1 = True

    # ...

    c = 550
    d = 100

    # ...

    color2 = (250, 20, 20)

    while ticket1 == True:
    for event in pygame.event.get():
    if event.type == pygame.QUIT:
    ticket1 = False
    pygame.quit()
    pygame.display.quit()

    keys = pygame.key.get_pressed()

    if keys[pygame.K_d]:
    c += 1

    # ...

    screen.fill((255, 250, 245))

    pygame.draw.rect(screen, color2, pygame.Rect(c, d, 50, 75))

    pygame.display.flip()

    如果我在while循环中编写keys = pygame.key.get_pressed(),则没有错误,但速度似乎较慢。

    我也有另一个错误:pygame.error: display Surface quit,但是我一直在所有pygame程序中都拥有它,它并不那么重要,但其他事情也很重要。

  • 最佳答案

    1 .--------------

    pygame.quit()之后,您不需要pygame.display.quit(),但需要sys.exit()pygame.quit()不会退出程序,因此程序仍然尝试在screen.fill()下调用pygame.quit()和其他函数

    或者,您必须将pygame.quit()放在while ticket == True:之外(这样就不需要sys.exit()了)

    您可以使用while ticket1:代替while ticket == True:-这更像pythonic。

    while ticket1: # it is more pythonic
    for event in pygame.event.get():
    if event.type == pygame.QUIT:
    ticket1 = False

    keys = pygame.key.get_pressed()

    if keys[pygame.K_d]:
    c += 1

    # ...

    screen.fill((255, 250, 245))

    pygame.draw.rect(screen, color2, pygame.Rect(c, d, 50, 75))

    pygame.display.flip()

    pygame.quit()

    2 .--------------
    if keys[pygame.K_d]: c += 1for event循环内,因此仅在事件发生时才调用-当鼠标移动,按下键或“按下”时。将其移到 for event循环之外。
    while ticket1: # it is more pythonic
    for event in pygame.event.get():
    if event.type == pygame.QUIT:
    ticket1 = False

    keys = pygame.key.get_pressed()

    # outside of `for event` loop
    if keys[pygame.K_d]:
    c += 1

    # ...

    screen.fill((255, 250, 245))

    pygame.draw.rect(screen, color2, pygame.Rect(c, d, 50, 75))

    pygame.display.flip()

    pygame.quit()

    有些人没有 get_pressed()
    # clock = pygame.time.Clock()
    move_x = 0

    while ticket1 == True:

    # events

    for event in pygame.event.get():
    if event.type == pygame.QUIT:
    ticket1 = False

    elif event.type == pygame.KEYDOWN:
    if event.key == pygame.K_ESCAPE:
    ticket1 = False

    elif event.key == pygame.K_d:
    move_x = 1

    elif event.type == pygame.KEYUP:
    if event.key == pygame.K_d:
    move_x = 0

    # variable modification

    c += move_x

    # ...

    # draws

    screen.fill((255, 250, 245))

    pygame.draw.rect(screen, color2, pygame.Rect(c, d, 50, 75))

    pygame.display.flip()

    # 60 FPS (Frame Per Second) to make CPU cooler

    # clock.tick(60)

    pygame.quit()

    顺便说一句:使用pygame.time.Clock()在快速和慢速计算机上获得相同的FPS。如果没有FPS程序刷新屏幕,每秒就会有数以千计的次数,因此CPU会很忙。

    如果使用FPS,则必须添加更大的 c值才能获得与之前相同的速度。

    关于python - pygame.key.get_pressed()-不起作用-pygame.error : video system not initialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22119244/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com