Python / Pygame - импорт таблицы спрайтов в виде массива проиндексированных ректов - PullRequest
1 голос
/ 29 марта 2020

подумал, что было бы неплохо выполнить некоторые программы во время блокировки Coronavirus. Я пытаюсь создать игру типа Undertale / Earthbound в Pygame и одновременно немного изучить Python, но я борюсь с импортом таблиц спрайтов и анимацией персонажей.

Вот мой код класса spritesheet :

class spritesheet:
    def __init__(self, fileName, rows, columns):
        self.sheet = pygame.image.load(fileName).convert_alpha()
        self.rows = rows
        self.columns = columns
        self.spriteNum = rows * columns
        self.sheetRect = self.sheet.get_rect()
        self.spriteWidth = self.sheetRect.width/columns
        self.spriteHeight = self.sheetRect.height/rows
        self.sprites = []
        for self.i in range(1, self.rows):
            for self.j in range(1, self.columns):
                self.sprites[self.i*self.j] = (self.j*self.spriteWidth,self.i*self.spriteHeight,self.spriteWidth,self.spriteHeight)

emilyWalk = spritesheet('Emily Walk Sheet.png', 1, 16)

Я пытаюсь создать список / массив (self.sprites), который перебирает каждую «ячейку» в моей таблице спрайтов и индексирует ее, используя счетчики i и j. Я думаю, что мой синтаксис здесь может быть неправильным.

Далее, у меня есть класс проигрывателя с методом "draw", где я пытаюсь перетаскивать соответствующий прямоугольник внутри spritesheet emilyWalk (используя "emilyWalk.sprites [ x] ") на поверхность:

class player(object):
    def __init__(self, x, y, width, height, vel):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = vel

    def draw(self, surface):
        if moveDown:
            surface.blit(emilyWalk.sheet, (self.x, self.y, emilyWalk.sprites[1]))

В моем основном l oop я использую pygame.key.get_pressed (), чтобы установить moveDown = True, moveUp = True, et c. используя W, A, S, D. Когда я нажимаю любую клавишу, в моем методе рисования появляется ошибка: индекс списка вне диапазона .

Я думаю, что проблема заключается в том, что я не сохранил свой массив ректов должным образом. Я считаю, что когда у меня есть rects в индексированном списке, я могу использовать параметр "area" функции blit, чтобы передать индексированный прямоугольник из моего списка, чтобы отображалась правильная ячейка из моей таблицы спрайтов.

Что такое Я здесь не так делаю?

Спасибо за ваше время!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...