当我尝试编写一个游戏(由《 Coding Games Python DK 3》一书介绍)时,我对python编程有疑问,它说: 名称'演员'未定义。
这是我的代码:
import pgzrun
from random import randint
WIDTH = 400
HEIGHT = 400
dots = []
lines = []
next_dot = 0
for dot in range(0, 10):
actor = Actor("dot")
actor.pos = randint(20, WIDTH -20), randint (20, HEIGHT - 20)
dots.append(actor)
def draw():
screen.fill("black")
number = 1
for dot in dots:
screen.draw.text(str(number), (dot.pos[0], dot.pos[1] + 12))
dot.draw()
number = number + 1
for line in lines:
screen.draw.line(line[0], line[1], (100, 0, 0))
pgzrun.go()
答案 0 :(得分:2)
您正在使用Python库pgzero
(通过导入pgzrun
间接)。
我已经将游戏代码重构为多个文件(导入到主文件中),并且也观察到相同的奇怪情况
NameError:名称“ Actor”未定义
错误消息。
Actor
类似乎是“私有”的,但是可以通过以下简单的代码行导入:
from pgzero.builtins import Actor, animate, keyboard
有关背景,请参见:
https://github.com/lordmauve/pgzero/issues/61
更新,2019年8月18日:由于在运行时(对象= Screen
类的实例)中已将其创建为全局变量,并且IDE支持代码完成,因此无法导入该屏幕对象那是不可能的。请参见源代码:https://github.com/lordmauve/pgzero/blob/master/pgzero/game.py(特别是def reinit_screen
部分)
答案 1 :(得分:0)
如果您在pip包中或同一个目录中,请定义Actor类或从包中将其导入
答案 2 :(得分:0)
根据我在Pygame Documentation website上可以找到的内容,Actor
在pgzrun包中定义。使用当前的import语句,您将必须通过以下方式调用Actor
构造函数
actor = pgzrun.Actor("dot")
,它将向编译器显示Actor
属于pgzrun。
或者,如果您只想使用Actor("dot")
,则可以将import语句更改为
from pgzrun import *
表示“从pgzrun导入所有内容”。这也会跟踪pgzrun的内容并告诉编译器,但这可能会导致问题(例如,如果您在代码中定义了自己的Actor
构造函数,则编译器将不知道您要尝试使用哪个构造函数使用)。
答案 3 :(得分:0)
好吧,我刚刚发现使用cmd运行没有问题,通过软件本身运行也有问题。
答案 4 :(得分:0)
Pygame网站上的此页面将帮助您从IDE中运行它:https://pygame-zero.readthedocs.io/en/stable/ide-mode.html
本质上,您必须具有以下两行代码:
import pgzrun
...
...
pgzrun.go()
但是在编码期间,IDE仍会抱怨未定义对象和功能(例如screen和Actor)。真烦人。据我所知,没有办法解决它,您只需要忽略这些抱怨,然后单击“调试”>“运行”即可。如果您没有错误,该程序将编译并运行。
关于
import pgzrun
actor = pgzrun.Actor("dot")
或
from pgzrun import *
dot=Actor("dot")
这些都无法帮助Spyder或Visual Studio这样的集成开发环境识别屏幕和 Actor
之类的对象和功能。pgzrun的行为似乎不像普通的python库。 Pygame依靠使用pgzrun从命令行运行python脚本:
pgzrun mygame.py
答案 5 :(得分:0)
因此,代码是正确的,但我可能会怀疑。我认为您没有在pgzero中上传名为“点”的图片。
答案 6 :(得分:0)
我收到了同样的错误消息,直到最后我在这里找到了这个主题。本书版本缺少 pgzrun 的第一行和最后一行。
如果您在输入这些行后仍然收到错误消息,我敢打赌您的“python”指向的是 python2。在命令行试试这个:
python -V
如果它显示版本为 2,则您需要修复它。检查
which python
如果它在/usr/bin,你可以这样做:
sudo su
cd /usr/bin
rm python
ln -s python3 python
如果它在 update-alternatives 目录中,您可以运行该程序来修复它。
答案 7 :(得分:-1)
解决方法很简单。不要给文件一个 name.py 名称,因为它与 python numbers.py 冲突