如何让Pygame中特定函数定时执行且不阻塞主游戏循环?
Pygame 定时生成飞船解决方案
要实现每4秒调用一次spawn_ship且不中断主游戏循环,核心思路是利用Pygame的时间记录功能,在主循环中检查时间差来触发生成逻辑,绝对不能用time.sleep()这类阻塞式延时(会直接卡死主循环)。
修改后的完整示例代码
import pygame import random # 初始化Pygame pygame.init() screen = pygame.display.set_mode((800, 600)) def spawn_ship(): # 示例:随机生成飞船坐标(可替换为你的实际生成逻辑) ship_x = random.randint(0, 800 - 50) ship_y = random.randint(-100, -50) # 从屏幕上方外生成,模拟飞入效果 print(f"生成飞船于 ({ship_x}, {ship_y})") # 这里可以添加创建飞船对象、加入精灵组等实际逻辑 def main(): last_spawn_time = 0 # 记录上次生成飞船的时间(单位:毫秒) spawn_interval = 4000 # 生成间隔:4000毫秒=4秒 while True: # 处理游戏事件(必须保留,否则游戏会无响应) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() return current_time = pygame.time.get_ticks() # 检查是否达到生成间隔 if current_time - last_spawn_time >= spawn_interval: spawn_ship() last_spawn_time = current_time # 更新上次生成时间,避免连续触发 # 其他游戏逻辑(绘制、移动、碰撞检测等) screen.fill((0, 0, 0)) # 这里可以添加绘制飞船、玩家角色等代码 pygame.display.flip() if __name__ == "__main__": main()
关键逻辑说明
pygame.time.get_ticks():返回从Pygame初始化到当前的毫秒数,是游戏内的精准计时方式,不受系统时间变动影响。last_spawn_time:记录上一次调用spawn_ship的时间,每次触发生成后更新这个值,确保下一次生成间隔从当前时间重新计算。- 主循环全程保持运行:事件处理、画面刷新、其他游戏逻辑都不会被阻塞,完全符合Pygame的游戏循环规范。
内容的提问来源于stack exchange,提问作者Grejuc Andrei
相关产品推荐
相关产品推荐

