Pygame精灵按住空格出现连续运球式跳跃,如何添加跳跃冷却间隔
问题根源
- 你当前的代码存在3个核心逻辑错误导致运球效果:
pygame.key.get_pressed()被放在事件遍历循环内部,每产生一个事件就会执行一次按键检测,跳跃逻辑会被重复执行- 使用
get_pressed()检测跳跃触发,该API会持续返回按键按住状态,只要按住空格就会每帧重置跳跃状态 - 没有跳跃冷却机制,单次跳跃结束后按住空格会立刻触发下一次跳跃
修改方案
首先新增2个全局变量实现冷却逻辑:
# 单位毫秒,跳跃冷却1秒 JUMP_COOLDOWN = 1000 # 记录上次跳跃完成的时间戳,初始为0 last_jump_time = 0
然后调整主循环逻辑:
- 把按键检测和跳跃逻辑移出事件遍历循环
- 改用
KEYDOWN事件检测空格按下,保证单次按下仅触发一次跳跃判定 - 新增冷却判定:只有当前未在跳跃、且距上次跳跃完成时间超过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
相关产品推荐
相关产品推荐

