【问题标题】:Pygame Keys Activating in Multiple Frames [duplicate]Pygame键在多帧中激活[重复]
【发布时间】:2020-10-26 15:42:16
【问题描述】:

在这个程序中,我想让它注册 Pressed Keys 但只注册一次而不是多次。如果你玩过 2048,我正在尝试制作类似的东西。 我想在不降低帧速率的情况下做到这一点。

import pygame, sys
pygame.init()

WIDTH, HEIGHT = 450,450
win = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
class Tile:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def Move(self):
        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT]:
            print("Left")
        elif keys[pygame.K_RIGHT]:
                print("Right")
        elif keys[pygame.K_UP]:
                print("Up")
        elif keys[pygame.K_DOWN]:
                print("Down")
            
keys = pygame.key.get_pressed()
        
running = run = True
a = Tile(200, 500)
while run:
    a.Move()
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            sys.exit()
            
    

    pygame.display.update()

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    你必须使用按键事件,而不是pygame.key.get_pressed()

    pygame.key.get_pressed() 返回一个包含每个键状态的列表。如果按住某个键,则该键的状态为True,否则为False。使用pygame.key.get_pressed()评估按钮的当前状态并获得连续移动

    键盘事件(参见pygame.event 模块)仅在按键状态更改时发生一次。每次按下某个键时,KEYDOWN 事件就会发生一次。每次释放键时,KEYUP 发生一次。将键盘事件用于单个操作或移动。

    在主应用程序循环中获取事件列表(event_list)并将列表传递给Tile类的方法Move。处理方法中的事件:

    import pygame, sys
    pygame.init()
    
    WIDTH, HEIGHT = 450,450
    win = pygame.display.set_mode((WIDTH, HEIGHT))
    clock = pygame.time.Clock()
    
    class Tile:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def Move(self, event_list):
            for event in event_list:
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        print("Left")
                    elif event.key == pygame.K_RIGHT:
                        print("Right")
                    elif event.key == pygame.K_UP:
                        print("Up")
                    elif event.key == pygame.K_DOWN:
                        print("Down")
                
    running = run = True
    a = Tile(200, 500)
    while run:
    
        event_list = pygame.event.get()
        a.Move(event_list)
    
        clock.tick(60)
        for event in event_list:
            if event.type == pygame.QUIT:
                run = False
                sys.exit()
    
        pygame.display.update()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2011-08-26
      • 2013-08-01
      • 2011-10-18
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多