2013-05-19 5 views
0

Я делаю какую-то игру, но мне удалось завершить начальный экран. Теперь я пытаюсь сделать ввод первого уровня (так что экран с некоторым объяснением и кнопка для продолжения). Этот фрагмент программы написан в другом файле, поэтому я не получаю файл из 1000 строк.Pygame, импортирующие модули

Но теперь у меня есть проблема. Я начинаю свой уровень с помощью:

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. Но теперь я попытался импортировать pygame в level1.py, но он не работает. Как я могу импортировать его?

Thx для вашей помощи! Lukas

пс: простите за мой плохой английский, я нидерландский ...

Edit: если я поставил "импорт 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 

Я не Не понимаю этого, потому что я назвал метод «level» с level1.level (screen), чтобы он проходил экран, а затем он устанавливал screen = originalalscreen (ведьма равнялась экрану из моего исходного файла)

Если я поставлю " 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 
>>> 
+0

Вы говорите, что в вашем файле 'level1.py' импорт Pygame не работает. Что ты имеешь в виду? Вы получаете исключение, когда пытаетесь? Если да, добавьте полный ответ на свой вопрос. – Blckknght

+0

Я отредактировал свое оригинальное сообщение :) – user2395313

ответ

0

Вы были правы в первый раз - ставить import pygame в верхней части файла, а не внутри класса.

Причина вы получили NameError сообщающее, что имя screenглобальный не был определен, что это не было: когда вы устанавливаете screen = originalscreen в методе __init__, вы создали новую переменную местного, который исчез как только этот метод закончится. Вместо этого используйте self.screen; то есть сохраните его как переменную экземпляра объекта level.

Заменить каждый экземпляр screen с self.screen в обоих __init__ и levelintro методов вашего level класса, и ваша NameError проблема должна быть решена.

+0

Большое вам спасибо! Очевидно, это была глупая ошибка, мне еще многое предстоит узнать! – user2395313

+0

Рад слышать, что он работает! Если вы все настроены, вы можете принять этот ответ, нажав зеленую галочку слева. – Etaoin

+0

Готово :) Теперь я могу перезапустить программирование! – user2395313

Смежные вопросы