2015-10-06 117 views
1

請原諒,如果之前已經詢問過,但我無法弄清楚爲什麼這不起作用。我已經Google搜索了好幾個小時,爲了記錄。 我不斷收到全局變量錯誤。我宣佈我的全局如此:在函數之外聲明全局變量

###Sprites### 
global_AB = [] 
global_AM = [] 
global_AD = [] 
global_BB = [] 
global_CO = [] 
global_DK = [] 
global_FB = [] 
global_O = [] 
global_R = [] 
global_SS = [] 
global_S = [] 
global_WU = [] 

但是,當我訪問它的函數內(在它已經被該功能設置)

#Loads all of the sprites and backgrounds, I recommend you close this if looking at the code. 
def loadImages(): 
    for i in range(0, (len(spriteNames) - 1)): 
     for z in range(0, numSprites[i]): 
      if i == 0: 
       AB.append(pygame.image.load(spriteNames[i] + str(z) + ".png_scaled.png")) 
      elif i == 1: 
       AM.append(pygame.image.load(spriteNames[i] + str(z) + ".png_scaled.png")) 
      elif i == 2: 
       AD.append(pygame.image.load(spriteNames[i] + str(z) + ".png_scaled.png")) 
      ... 8 more of these 

當由塊傳輸圖像訪問我得到一個錯誤說這是沒有定義(我試圖將AB [0]射到表面上),

如果你知道另一種方法,請讓我知道。我之前編寫過JASS(這就是爲什麼我用一種簡單的方式來聲明全局變量),我不知道如何讓所有函數中的列表都能被訪問。

非常感謝! - Zach

+0

如果你聲明瞭全局變量,你需要使用'global'關鍵字:'global foo = []' – MattDMo

+0

另外,使用字典比使用類似命名的列表要好得多:'sprites = {「AB」:[],「AM」:[],...}' – MattDMo

回答

2

爲了使用全局,您需要在您的方法中實際明確地設置它。下面是一個應該幫助你的例子:

glb = "I am global" 

def foo(): 
    global glb 
    glb = "I changed you mr. global" 

foo() 
# Outputs: I changed you mr. global 
print(glb) 
1

除了全局關鍵字,你的變量名稱需要匹配。您定義了global_AB,然後參考AB