Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame,导入模块_Python_Class_Import_Pygame - Fatal编程技术网

Python Pygame,导入模块

Python Pygame,导入模块,python,class,import,pygame,Python,Class,Import,Pygame,我正在做一些游戏,但我只完成了开始屏幕。现在我试着做第一级的介绍(这样一个屏幕上有一些解释,还有一个按钮可以继续)。这段程序是在另一个文件中编写的,所以我没有得到1000行的文件 但现在我有一个问题。我通过以下方式开始我的级别: import level1 # here is my code of the level level1.level(screen) # "level" is the class and screen is used so pygame

我正在做一些游戏,但我只完成了开始屏幕。现在我试着做第一级的介绍(这样一个屏幕上有一些解释,还有一个按钮可以继续)。这段程序是在另一个文件中编写的,所以我没有得到1000行的文件

但现在我有一个问题。我通过以下方式开始我的级别:

import level1 # here is my code of the level
level1.level(screen) # "level" is the class and screen is used so pygame 
                     # uses the same screen and doesn't start a new one
这是level1.py:

class level():
    def __init__(self,originalscreen):
        screen = originalscreen
        self.levelintro()

    def levelintro(self):
        # Setting some variables
        levelintro = True

        # Background 
        background = pygame.Surface(screen.get_size()) # Change this
        background = background.convert()
        background.fill((255,0,0))

        # "Got it" button
        gotitbutton = pygbutton.PygButton((350, 450, 300, 40))

        while levelintro:
            screen.fill(0)  
            # Blitting
            screen.blit(background, (0,0))
            gotitbutton.draw(screen)

            # Refreshing screen
            pygame.display.flip()
现在我的问题是:在我原来的.py中,我导入了pygame。但现在我尝试在level1.py中导入pygame,但它不起作用。我怎样才能导入它

谢谢你的帮助! 卢卡斯

对不起,我英语不好,我是荷兰人

编辑: 如果我把“导入pygame”放在我的班级前面:

Traceback (most recent call last):
  File "C:\Users\Lukas\Google Drive\Project\0.1\Project.py", line 17, in <module>
    class startscreen():
  File "C:\Users\Lukas\Google Drive\Project\0.1\Project.py", line 51, in startscreen
    level1.level(screen)
  File "C:\Users\Lukas\Google Drive\Project\0.1\level1.py", line 8, in __init__
    self.levelintro()
  File "C:\Users\Lukas\Google Drive\Project\0.1\level1.py", line 15, in levelintro
    background = pygame.Surface(screen.get_size()) # Change this
NameError: global name 'screen' is not defined
回溯(最近一次呼叫最后一次):
文件“C:\Users\Lukas\Google Drive\Project\0.1\Project.py”,第17行,在
类startscreen():
文件“C:\Users\Lukas\Google Drive\Project\0.1\Project.py”,第51行,在startscreen中
级别1.级别(屏幕)
文件“C:\Users\Lukas\Google Drive\Project\0.1\level1.py”,第8行,在\uuu init中__
self.levelintro()
levelintro中第15行的文件“C:\Users\Lukas\Google Drive\Project\0.1\level1.py”
background=pygame.Surface(screen.get_size())#更改此设置
名称错误:未定义全局名称“屏幕”
我不明白这一点,因为我用level1.level(screen)调用了方法“level”,所以它通过屏幕,然后设置screen=originalscreen(witch等于我原始文件中的屏幕)

如果我将“import pygame”放在我的类中,我会得到:

Warning (from warnings module):
  File "C:\Users\Lukas\Google Drive\Project\0.1\level1.py", line 3
    class level():
SyntaxWarning: import * only allowed at module level

Traceback (most recent call last):
  File "C:\Users\Lukas\Google Drive\Project\0.1\Project.py", line 17, in <module>
    class startscreen():
  File "C:\Users\Lukas\Google Drive\Project\0.1\Project.py", line 51, in startscreen
    level1.level(screen)
  File "C:\Users\Lukas\Google Drive\Project\0.1\level1.py", line 9, in __init__
    self.levelintro()
  File "C:\Users\Lukas\Google Drive\Project\0.1\level1.py", line 16, in levelintro
    background = pygame.Surface(screen.get_size()) # Change this
NameError: global name 'pygame' is not defined
>>> 
警告(来自警告模块):
文件“C:\Users\Lukas\Google Drive\Project\0.1\level1.py”,第3行
类级别():
SyntaxWarning:仅允许在模块级别导入*
回溯(最近一次呼叫最后一次):
文件“C:\Users\Lukas\Google Drive\Project\0.1\Project.py”,第17行,在
类startscreen():
文件“C:\Users\Lukas\Google Drive\Project\0.1\Project.py”,第51行,在startscreen中
级别1.级别(屏幕)
文件“C:\Users\Lukas\Google Drive\Project\0.1\level1.py”,第9行,在\uuu init中__
self.levelintro()
levelintro中第16行的文件“C:\Users\Lukas\Google Drive\Project\0.1\level1.py”
background=pygame.Surface(screen.get_size())#更改此设置
NameError:未定义全局名称“pygame”
>>> 

您第一次就做对了--将
导入pygame
放在文件顶部,而不是类内部

您得到的
namererror
告诉您没有定义全局名称
screen
的原因是:当您在
\u init\u
方法中设置
screen=originalsscreen
时,您创建了一个新的局部变量,该变量在该方法结束后立即消失。相反,使用
self.screen
;也就是说,将其作为实例变量存储在
级别
对象上


级别
类的
初始化
级别导入
方法中,用
self.screen
替换
屏幕
的每个实例,你的
名称错误
问题应该得到解决。

你说在
级别1.py
文件中导入Pygame不起作用。你这是什么意思?您尝试时是否遇到异常?如果是这样的话,请给你的问题添加完整的回溯。我编辑了我原来的帖子:)非常感谢!这显然是一个愚蠢的错误,我仍然要学习很多!很高兴听到它起作用了!如果您都准备好了,您可以通过单击左侧的绿色复选标记来接受此答案。完成:)现在我可以重新开始编程了!