如何限制Pygame游戏中生成的圆形数量且不拖慢游戏运行速度
问题根源
你当前代码的逻辑是每运行一次游戏主循环(每秒会跑144次)就生成1个新圆形,且没有存储已生成的圆形坐标,也没有做生成间隔、总数量限制。用time.sleep()会阻塞整个主线程,所以才会拖慢游戏运行,完全不需要用这个方法,用帧计数或者pygame内置的时间机制就能实现需求。
具体解决思路
- 新增一个列表存储所有已生成的圆形坐标,后续做碰撞收集判定也需要用到这个列表
- 新增变量控制生成间隔,每经过指定帧数/毫秒才生成1个新圆形
- 新增变量限制最大生成数量,列表长度达到阈值后不再生成新圆形
- 每次渲染时遍历列表绘制所有存在的圆形
修改后的可运行代码
import pygame import random pygame.init() y = 0 x = 0 point = 0 is_blue = True WHITE = (255, 255, 255) clock = pygame.time.Clock() screen = pygame.display.set_mode([500, 500]) # 新增配置 MAX_FOOD = 10 # 屏幕上最多同时存在10个圆形 SPAWN_INTERVAL = 60 # 每60帧生成1个新圆形,144帧的话大概0.4秒生成一个 food_list = [] # 存储所有圆形的坐标 frame_count = 0 # 帧计数器 done = False while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: is_blue = not is_blue pygame.display.set_caption("Collect the balls to win!") pressed = pygame.key.get_pressed() if pressed[pygame.K_UP]: y -= 3 if pressed[pygame.K_DOWN]: y += 3 if pressed[pygame.K_LEFT]: x -= 3 if pressed[pygame.K_RIGHT]: x += 3 if x <= -1: x = 0 if x >= 441: x = 440 if y <= -1: y = 0 if y >= 441: y = 440 # 生成圆形逻辑 frame_count += 1 if frame_count >= SPAWN_INTERVAL and len(food_list) < MAX_FOOD: # 满足间隔要求且没到最大数量才生成新圆形 new_food_pos = (random.randint(1, 400), random.randint(1, 400)) food_list.append(new_food_pos) frame_count = 0 # 重置计数器 screen.fill((0, 0, 0)) if is_blue: color = (0, 128, 255) else: color = (255, 100, 0) pygame.draw.rect(screen, color, pygame.Rect(x, y, 30, 30)) # 遍历绘制所有圆形 for pos in food_list: pygame.draw.circle(screen, WHITE, pos, 5) pygame.display.flip() clock.tick(144)
如果需要实现“圆形被收集后补充新的”逻辑,只需要在碰撞检测后把对应坐标从food_list里移除即可,生成逻辑会自动补充新的圆形。
内容的提问来源于stack exchange,提问作者bruh3436
相关产品推荐
相关产品推荐

