Pygame点击鼠标时无法在对应位置渲染rect矩形是什么原因?
问题原因
- 核心错误是把
pygame.init()和pygame.display.set_mode()放在了主循环内部,每次循环都会重新初始化pygame、创建全新的空白窗口,上一轮绘制的矩形会被直接清空,自然无法显示 - 调用
pygame.quit()后没有终止程序,后续循环继续执行会触发pygame相关报错 - 未提前设置背景填充,容易出现绘制内容和背景色混淆的问题
修正后可运行代码
以下代码可以实现点击鼠标生成矩形、所有点击的矩形都保留在窗口的效果:
import pygame from pygame.locals import * # 初始化和窗口创建要放在主循环外,仅执行一次 pygame.init() DISPLAY = pygame.display.set_mode((400,400)) WHITE = (255,255,255) # 提前填充黑色背景 DISPLAY.fill((0,0,0)) while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() exit() # 调用quit后直接终止程序,避免报错 if event.type == KEYDOWN and event.key == K_ESCAPE: pygame.quit() exit() if event.type == MOUSEBUTTONDOWN: x,y = pygame.mouse.get_pos() pygame.draw.rect(DISPLAY,WHITE,(x,y,20,20)) print('mouse') pygame.display.update()
如果你需要每次仅显示最新点击的矩形,把DISPLAY.fill((0,0,0))移动到主循环内部、事件处理代码的前面即可。
内容的提问来源于stack exchange,提问作者Tharusha-dev
相关产品推荐
相关产品推荐

