подумал, что было бы неплохо выполнить некоторые программы во время блокировки 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, чтобы передать индексированный прямоугольник из моего списка, чтобы отображалась правильная ячейка из моей таблицы спрайтов.
Что такое Я здесь не так делаю?
Спасибо за ваше время!