2016-02-14 71 views
0

我的任務是製作一個遊戲,應該有多個模塊以避免在一個腳本中混亂。我遇到了從其中一個模塊導入變量的問題。到目前爲止,我有一個設置和一個主要設置。這些設置是相當簡單的,去:python - 使用從模塊導入的類的問題

class Settings(): 
def __init__(self): 
    self.screen_width = 1920 
    self.screen_height = 1080 
    self.bg_color = (230, 230, 230) 

很簡單,但是當我嘗試引用這些變量,它說類「未解決屬性引用‘SCREEN_WIDTH’‘設置’

主,就如同:

import sys, pygame 
from game_settings import Settings 

def run_game(): 
    #Initialize the game and create the window 
    pygame.init() 
    screen = pygame.display.set_mode((Settings.screen_width,Settings.screen_height), pygame.FULLSCREEN) 
    pygame.display.set_caption("Alien Invasion") 

while True: 

    #Listening for events 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 
    screen.fill(Settings.bg_color) 
    pygame.display.flip() 

run_game() 

我想,也許這將是一個PyCharm問題,但發現它在空閒所以這將是導入變量的正確方法是一回事嗎?

感謝您花時間閱讀本文!

+0

但它運行的權利? – danidee

+0

我絕對不是專家,但不是'bg_color','screen_width'和'scree_height'部分的實例而不是類本身?換句話說,我不認爲你可以訪問Settings.bg_color,我認爲你需要創建一個Settings對象,像's = Settings()',然後你可以執行'.bg_color'。 –

+0

@danidee沒有它不起作用 –

回答

2

您需要創建一個Settings類的實例,因爲at您在其__init__方法中設置的貢品是實例屬性。

嘗試這樣:

def run_game(): 
    my_settings = Settings() # create Settings instance 
    pygame.init() 
    screen = pygame.display.set_mode((my_settings.screen_width, # lookup attributes on it 
             my_settings.screen_height), 
            pygame.FULLSCREEN) 
    # ... 
+0

謝謝!這工作完美。 –

0

您需要創建設置對象的實例:s = Settings()

用法:s.bg_color

OR

改變你的設置類,像這樣和性能都可以訪問靜態:

class Settings(): 
    screen_width = 1920 
    screen_height = 1080 
    bg_color = (230, 230, 230) 
0

兩個文件必須在同一文件夾中,你必須創建Settings類的一個實例。然後你可以訪問你的實例的屬性。

main.py:

from game_settings import Settings 
s = Settings() 
print(s.bg_color) 

game_settings.py:

class Settings(): 
    def __init__(self): 
     self.screen_width = 1920 
     self.screen_height = 1080 
     self.bg_color = (230, 230, 230) 

當您運行main.py,輸出將是:

(230, 230, 230)