2017-03-01 102 views
-1

這是我第一次嘗試定義一個類。我的目的是在sprite頁面中提供精靈的尺寸和幀的總數,並讓這個類別計算所有幀的開始點和停止點。然後,它會將它們添加到包含所有已完成數學的元組中,以便它可以在正確的時間和位置對精靈進行blit以創建動畫。它的工作原理,如果我手動添加所有的幀位置的元組在主遊戲程序是這樣的:定義返回對象的類不支持索引

ninjaImg = pygame.image.load('mainp32.png') 
    playerImg[0]=(ninjaImg.subsurface((0,0,32,32))) 
    playerImg[1]=(ninjaImg.subsurface((32,0,32,32))) 
    #and so on.... 

但上面的代碼會很快得到混亂,我想利用這個相同的類在稍後的遊戲中爲其他角色提供動畫幀。

我認爲數學是可靠的,但我懷疑有什麼我不知道導致此錯誤的列表/元組。任何幫助將不勝感激。我讀過列表/元組4個教程,它只是不幫我...

這裏是我的代碼:

import pygame 

class sprite32 (pygame.sprite.Sprite): 
    def __init__(self , sprite_sheet_name , x , y , x_total , y_total): 
     #sprite_sheet_name = original PNG sprite file 
     #x = width of a single sprite frame 
     #y = height of a single sprite frame 
     #x_total = number of sprites columns (width) 
     #y_total = number of sprites rows (height) 
     #self = variable name 
     self = [] 
     sprite_sheet_convert = pygame.image.load(sprite_sheet_name) 
     for i in range(x_total - 1): 
      t = i 
      for i in range(y_total - 1): 
       self.append(sprite_sheet_convert.subsurface((t,i,x,y))) 

和錯誤消息:

C:\Python31>w.py 
Traceback (most recent call last): 
    File "C:\Python31\w.py", line 200, in <module> 
    DISPLAYSURF.blit(playerImg[playerspriteframe],(playerx,playery)) 
TypeError: 'sprite32' object does not support indexing 
+1

如果'self'是一個類,它是不可能的,你可以「轉換」成一個清單,這樣的說法:'自我= []',但如果你告訴我們,這將有助於到底是哪行號200是。 –

+0

抱歉:)第200行是錯誤代碼DISPLAYSURF.blit(playerImg [playerspriteframe],(playerx,playery))中列出的行。它來自主程序嘗試調用 – MattxxttaM

回答

0

如果你想訪問你的自定義類作爲你必須實現的列表operator overloading,尤其是__getitem__

示例代碼:(我實現了一個列表items來存儲項目)

import pygame 

class sprite32 (pygame.sprite.Sprite): 
    items = [] 

    def __init__(self , sprite_sheet_name , x , y , x_total , y_total): 
     #sprite_sheet_name = original PNG sprite file 
     #x = width of a single sprite frame 
     #y = height of a single sprite frame 
     #x_total = number of sprites columns (width) 
     #y_total = number of sprites rows (height) 
     #self = variable name 
     sprite_sheet_convert = pygame.image.load(sprite_sheet_name) 
     for i in range(x_total - 1): 
      t = i 
      for i in range(y_total - 1): 
       self.items.append(sprite_sheet_convert.subsurface((t,i,x,y))) 

    def __getitem__(self, key): 
     return self.items[key] 
+0

類的權限。這是我需要的。萬分感謝! – MattxxttaM