python - 为什么循环时程序中没有定义屏幕?
问题描述
当我尝试在鼠标坐标处画一个圆圈时,我使用以下代码:
def main():
screen.clear()
mx, my = pygame.mouse.get_pos()
screen.draw.circle((mx, my), 30, (255, 255, 255))
一次有效,但是当我将其更改为如下所示时:
def main():
screen.clear()
mx, my = pygame.mouse.get_pos()
screen.draw.circle((mx, my), 30, (255, 255, 255))
screen.clear()
while (1):
main()
它引发了这个错误:
Traceback (most recent call last):
File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/lib/python3/dist-packages/pgzero/__main__.py", line 3, in <module>
main()
File "/usr/lib/python3/dist-packages/pgzero/runner.py", line 92, in main
exec(code, mod.__dict__)
File "virus-simulation!.py", line 6, in <module>
main()
File "virus-simulation!.py", line 2, in main
screen.clear()
NameError: name 'screen' is not defined
发生这种情况有什么原因吗?
解决方案
我不知道你的屏幕是在哪里定义的,所以我不能确定是什么导致了这个问题。这是基于您的示例的一些工作代码。它在鼠标位置绘制一个圆圈。
import pygame
pygame.init()
class CDraw():
def __init__(self, sc):
self.scrn = sc
def circle(self, p, r, c):
pygame.draw.circle(self.scrn, c, p, r)
class CScreen():
def __init__(self):
self.scrn = pygame.display.set_mode((400,400))
self.draw = CDraw(self.scrn)
def clear(self):
self.scrn.fill((0,200,0))
screen = CScreen()
def main():
screen.clear()
mx, my = pygame.mouse.get_pos()
screen.draw.circle((mx, my), 30, (255, 255, 255))
#screen.clear() # will remove everything
for event in pygame.event.get(): # needed for os events
if event.type == pygame.QUIT:
exit()
pygame.display.update() # needed to do screen update
while (1):
main()
推荐阅读
- tensorflow - 在 tensorflow 或 pytorch 中临时释放 gpu
- azure - 在 DevOps 中从 ARM 模板部署逻辑应用程序时,如何创建与 Azure KeyVault 的 API 连接
- python - 使用 beautifulsoup 'NoneType' 对象进行 Webscraping 没有属性 'get_text'
- scala - scala - 比较元组或通过超过 1 个元组的键相交
- docker - 在 docker 容器之间共享样式表文件
- html - 如何使迷你图像和描述容器位于导航栏/标题的底部或末尾?
- react-native - 读取目录中的文件 - Expo FileSystem
- r - 自动安装最有用的软件包
- reactjs - 反应:反应引导按钮
- azure - Azure 文本到语音服务没有响应