You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame精灵按住空格出现连续运球式跳跃,如何添加跳跃冷却间隔

问题根源
  • 你当前的代码存在3个核心逻辑错误导致运球效果:
    1. pygame.key.get_pressed() 被放在事件遍历循环内部,每产生一个事件就会执行一次按键检测,跳跃逻辑会被重复执行
    2. 使用get_pressed()检测跳跃触发,该API会持续返回按键按住状态,只要按住空格就会每帧重置跳跃状态
    3. 没有跳跃冷却机制,单次跳跃结束后按住空格会立刻触发下一次跳跃
修改方案

首先新增2个全局变量实现冷却逻辑:

# 单位毫秒,跳跃冷却1秒
JUMP_COOLDOWN = 1000
# 记录上次跳跃完成的时间戳,初始为0
last_jump_time = 0

然后调整主循环逻辑:

  1. 把按键检测和跳跃逻辑移出事件遍历循环
  2. 改用KEYDOWN事件检测空格按下,保证单次按下仅触发一次跳跃判定
  3. 新增冷却判定:只有当前未在跳跃、且距上次跳跃完成时间超过1秒才允许触发新的跳跃
修改后完整代码
import pygame
import sys
from pygame.locals import *

pygame.init()
# 此处保留你原本的窗口初始化代码
# screen = pygame.display.set_mode((自定义宽度, 自定义高度))

fps = 90
fpsclock = pygame.time.Clock()
# 原有跳跃参数保留
is_jump = False
jump_count = 10
direction = 1
icony = 340
# 新增冷却参数
JUMP_COOLDOWN = 1000
last_jump_time = 0

while True:
    current_time = pygame.time.get_ticks()
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        # 仅在空格按下瞬间触发一次判定
        if event.type == KEYDOWN and event.key == K_SPACE:
            # 仅满足未跳跃、冷却结束两个条件才触发新跳跃
            if not is_jump and current_time - last_jump_time >= JUMP_COOLDOWN:
                is_jump = True
    
    # 跳跃逻辑每帧统一执行一次
    if is_jump and icony <= 340:
        icony -= jump_count**2 * 0.4 * direction
        jump_count -= 1
        if jump_count == 0:
            direction *= -1
        if jump_count == -10:
            is_jump = False
            jump_count = 10
            direction = 1
            icony = 340
            # 跳跃完成时更新上次跳跃时间
            last_jump_time = current_time

    # 此处保留你原本的精灵绘制、场景渲染代码
    
    fpsclock.tick(fps)
    pygame.display.update()

内容的提问来源于stack exchange,提问作者Saksham Rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 19:24:01