名称'演员'未定义

时间:2019-03-31 05:44:57

标签: python

当我尝试编写一个游戏(由《 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()

8 个答案:

答案 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 冲突