这是我第一次尝试定义一个类。我的目的是在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
如果'self'是一个类,它是不可能的,你可以“转换”成一个清单,这样的说法:'自我= []',但如果你告诉我们,这将有助于到底是哪行号200是。 –
抱歉:)第200行是错误代码DISPLAYSURF.blit(playerImg [playerspriteframe],(playerx,playery))中列出的行。它来自主程序尝试调用 – MattxxttaM