0

なんらかのゲームを作っているのですが、スタート画面しかできませんでした。今、私は最初のレベルのイントロを作ろうとしています (そのため、いくつかの説明と続行するためのボタンが表示された画面です)。プログラムのこの部分は別のファイルに書かれているので、数千行のファイルを取得することはできません。

しかし今、私には問題があります。以下を使用してレベルを開始します。

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 をインポートしようとしましたが、うまくいきません。どうすればインポートできますか?

助けてくれてありがとう!ルーカス

ps: 下手な英語でごめんなさい、私はオランダ人です...

編集:「import 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

level1.level(screen) でメソッド「レベル」を呼び出して画面を渡し、 screen = originalscreen を設定するため、これを理解できません (魔女は元のファイルの画面と同じです)

クラス内に「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
>>> 
4

1 に答える 1

0

最初は正しかった -import pygameクラス内ではなく、ファイルの先頭に配置します。

グローバル名がNameError定義されていないと言われたのは、そうでなかったからです。メソッドを設定すると、新しいローカル変数が作成され、そのメソッドが終了するとすぐに消えてしまいました。代わりに、;を使用します。つまり、オブジェクトのインスタンス変数として格納します。screenscreen = originalscreen__init__self.screenlevel

クラスの メソッドとメソッドの両方で のすべてのインスタンスを置き換えれscreenば、問題は解決するはずです。self.screen__init__levelintrolevelNameError

于 2013-05-19T21:50:10.973 に答える