Pygame数学函数绘制脚本需空跑一次函数才正常运行问题
解决方案
核心故障原因
- 初始化顺序错误:必须先调用
pygame.init()完成pygame全模块初始化,再调用pygame.display.set_mode()创建显示窗口。原代码先创建窗口再初始化pygame,导致首次运行时窗口渲染上下文未正常加载,才会出现需要空跑一次才能正常显示的异常。 - 渲染时序混乱:原代码存在多处多余的
pygame.display.flip()调用,填充背景、获取用户输入、每绘制一条线时都触发了屏幕刷新,打乱了正常的渲染流程。 - 不必要的重复计算:绘制循环内每次迭代都重复生成函数对象,属于无意义的性能损耗。
修复后可直接运行的代码
import pygame def replace_x(function): f = lambda x: eval(function) return f def convert_y(y_coords): y_coords = 540 - y_coords return y_coords def convert_x(x_coord): x_coord = x_coord + 960 return x_coord # 先初始化pygame再创建窗口,修正初始化顺序 pygame.init() # variables background_colour = (255, 255, 255) screen = pygame.display.set_mode((1920, 1080)) running = True current_y = 0 previous_y = 0 pygame.display.set_caption('Mathe Kreativarbeit') screen.fill(background_colour) # 填充背景后仅刷新一次 pygame.display.flip() function_input = input("Funktion: ") function_input = function_input.replace("^", "**") # 提前生成函数对象,避免循环内重复创建 f = replace_x(function_input) for x_coords in range(-15, 17): current_y = convert_y(f(x_coords)) previous_y = convert_y(f(x_coords - 1)) start_pos = (convert_x((x_coords - 1) * 60), previous_y) end_pos = (convert_x(x_coords * 60), current_y) print(start_pos) print(end_pos) pygame.draw.aaline(screen, (0, 0, 0), start_pos, end_pos) # 所有线条绘制完成后统一刷新一次即可 pygame.display.flip() while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit()
内容的提问来源于stack exchange,提问作者Christopher Löwenstein
相关产品推荐
相关产品推荐

