Я получаю сообщение об ошибке при использовании таблицы спрайтов в Python - PullRequest
0 голосов
/ 22 июня 2019

Я получаю 2 ошибки при попытке запустить мой код, но, вероятно, есть еще кое-что, поскольку я впервые использую таблицы спрайтов. Первая ошибка заключается в том, что при вызове spritesheet я получаю сообщение об ошибке, в котором говорится, что я даю 4 аргумента, когда ему нужно только 3. Я, похоже, вижу только 3 аргумента. Вторая ошибка - объект 'tuple' не вызывается для этой строки кода: (-1*halfSpriteWidth,-1*spriteHeight),(-1*spriteWidth,-1*spriteHeight)]). Может кто-нибудь, пожалуйста, помогите мне разобраться в этом.

class spritesheet:
    def __init__(filename,columns,rows):
        sheet = image.load(filename)
        totalCellCount = columns * rows
        rect = sheet.get_rect()
        spriteWidth = cellWidth = rect.width / columns
        spriteHeight = cellHeight = rect.height / rows
        halfSpriteWidth, halfSpriteHeight = cellCenter = (spriteWidth/2,spriteHeight/2)
        cells = list([(index % columns * spriteWidth, index / columns * spriteHeight,spriteWidth,spriteHeight)for index in range(totalCellCount)])
        handle = list([
            (0,0), (-1*halfSpriteWidth,0),(-1*spriteWidth,0),
            (0,-1*halfSpriteHeight),(-1*halfSpriteWidth,-1*halfSpriteHeight),
            (-1*spriteWidth,-1*halfSpriteHeight),(0,-1*spriteHeight)
            (-1*halfSpriteWidth,-1*spriteHeight),(-1*spriteWidth,-1*spriteHeight)])
        def draw(surface,cellIndex, x,y,handle = 0):
            surface.blit(self.sheet(x + handle[handle][0], y + handle[handle][1]),cells[cellIndex])

player = spritesheet('player.png',4,4)
centerHandle = 4
index = 0

1 Ответ

1 голос
/ 22 июня 2019

Вы полностью забыли аргумент self. Ваш __init__ метод должен быть:

def __init__(self,filename,columns,rows):

, а также:

def draw(self,surface,cellIndex, x,y,handle = 0):

и не забывайте, что атрибутам, которые должны быть запомнены экземпляром, также требуется self перед.
Вы, вероятно, хотите:

def __init__(filename,columns,rows):
    self.sheet = image.load(filename)
    self.totalCellCount = columns * rows
    self.rect = self.sheet.get_rect()
    #...
    self.handle = list([
        (0,0), (-1*halfSpriteWidth,0),(-1*spriteWidth,0),
        (0,-1*halfSpriteHeight),(-1*halfSpriteWidth,-1*halfSpriteHeight),
        (-1*spriteWidth,-1*halfSpriteHeight),(0,-1*spriteHeight)
        (-1*halfSpriteWidth,-1*spriteHeight),(-1*spriteWidth,-1*spriteHeight)])

и draw также self.handle при обращении к списку. Кстати, вызов list тоже не нужен, достаточно квадратных скобок.

Ошибка кортежа из-за отсутствия запятой между двумя кортежами в списке self.handle:

(0,-1*spriteHeight)(-1*halfSpriteWidth,-1*spriteHeight),
                  ^^^ insert comma here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...