python - 如何在 pygame 中禁用按键按住?

标签 python pygame

我正在努力如何做到这一点,以便当在 Pygame 中按下某个键时,您无法继续按住该键。 我正在研究玩家跳跃,但除非只按一次键,否则它不起作用。 这是我的按键代码:

keys = pygame.key.get_pressed()
if keys[pygame.K_UP] and not self.jumping:
    self.jumping = True

这是我的跳跃方法(也包括重力)

def gravity(self):
        # if the player isn't jumping
        if not self.jumping:
            # set acceleration constant and accelerate
            self.accel_y = PLAYER_ACCELERATION
            self.y_change += self.accel_y

            # terminal velocity
            if abs(self.y_change) >= PLAYER_MAX_SPEED_Y:
                # set the y change to the max speed
                self.y_change = PLAYER_MAX_SPEED_Y

            self.y += self.y_change

        else: # jumping
            self.accel_y = -PLAYER_ACCELERATION_JUMPING
            self.y_change += self.accel_y

            if abs(self.y_change) >= PLAYER_MAX_SPEED_JUMPING:
                self.jumping = False

            self.y += self.y_change

            print(self.y_change)

玩家可以继续按住向上箭头键,玩家就会飞起来 - 这不好。我希望你只能按一次,然后 self.jumping设置为False当它达到最高速度时(我已经实现了)

最佳答案

不要使用pygame.key.get_pressed()在这种情况下,请使用键盘事件(请参阅 pygame.event )。

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

键盘事件仅在按键状态更改时发生一次。每次按下按键时,KEYDOWN 事件都会发生一次。每次释放按键时KEYUP都会发生一次。使用键盘事件进行单个操作或逐步移动。

例如:

while True:

     for event in pygame.event.get():

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and not self.jumping:
                self.jumping = True

关于python - 如何在 pygame 中禁用按键按住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65049343/

相关文章:

python - 简单程序中的错误: TypeError: into object has no attribute '__getitem__'

python - 如何在 random.randrange 中使用负数

python - PyOpenGL 片段着色器纹理采样

python - 请求模块返回带有无序项目的 json

python - 为什么在pygame中文本显示2秒

python - 如果 x != 0,则不带 0.x.x.x 的 ipv4 地址的正则表达式

python - 当我为变量 URL 指定转​​换器时,为什么我的 Flask 路由列表功能会失败?

python - 对列表中的 numpy 数组进行 += 操作会增加其他列表元素。 Np数组似乎是独立设置的

python - Flask SQLAlchemy 批量删除记录

python - 在 python 中查询返回本地范围的对象