2017-03-01 101 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