Итак, я работаю над основной игрой PacMan и пытаюсь заставить моего игрока запустить его sprite_sheet, чтобы показать анимацию.Он работает безупречно, когда я двигаю его вправо (это исходная ориентация изображения), однако для любого из других направлений, где я pygame.transform.rotate () изображения, он возвращает следующее: self.image = (PAC_UP [self.spritesheet_index% 4]) IndexError: список индексов выходит за пределы диапазона
Не уверен, почему это происходит (очевидно, это связано с вращением).Будем очень благодарны за любые объяснения вращений и причин, по которым это происходит!
Спасибо!Вот мой код:
class sprite_sheet():
def __init__ (self, filename):
self.spritesheet = pygame.image.load(filename)
def get_image(self, x, y, width, height):
image = pygame.Surface((width, height))
image.set_colorkey(BLACK)
image.blit(self.spritesheet, (0,0), (x, y, width, height))
return image
PAC_RIGHT = []
for x in range(4):
image = (sprite_sheet('pacman-spritesheet.png').get_image(x*24, 0, 24, 24))
PAC_RIGHT.append(image)
PAC_UP = []
for x in range(4):
image = sprite_sheet('pacman-spritesheet.png').get_image(x*24, 0, 24, 24)
PAC_RIGHT.append(pygame.transform.rotate(image, 90))
PAC_LEFT = []
for x in range(4):
image = sprite_sheet('pacman-spritesheet.png').get_image(x*24, 0, 24, 24)
PAC_RIGHT.append(pygame.transform.rotate(image, 180))
PAC_DOWN = []
for x in range(4):
image = sprite_sheet('pacman-spritesheet.png').get_image(x*24, 0, 24, 24)
PAC_RIGHT.append(pygame.transform.rotate(image, 270))
class Player (pygame.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites
pygame.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.image = sprite_sheet('pacman-spritesheet.png').get_image(0, 0, 24, 24)
self.x = x * TILESIZE
self.y = y * TILESIZE
self.rect = self.image.get_rect()
self.vx, self.vy = 0, 0
self.spritesheet_index = 0
self.first_time = pygame.time.get_ticks()
self.delay = 43
def get_keys(self):
self.vx, self.vy = 0, 0
keys = pygame.key.get_pressed()
self.spritesheet_index += 1
if keys[pygame.K_LEFT]:
self.vx = -PLAYER_SPEED
self.second_time = pygame.time.get_ticks()
if self.second_time-self.first_time > self.delay:
self.image = (PAC_LEFT[self.spritesheet_index % 4])
self.first_time = pygame.time.get_ticks()
if keys[pygame.K_RIGHT]:
self.vx = PLAYER_SPEED
self.second_time = pygame.time.get_ticks()
if self.second_time-self.first_time > self.delay:
self.image = (PAC_RIGHT[self.spritesheet_index % 4])
self.first_time = pygame.time.get_ticks()
if keys[pygame.K_UP]:
self.vy = -PLAYER_SPEED
self.second_time = pygame.time.get_ticks()
if self.second_time-self.first_time > self.delay:
self.image = (PAC_UP[self.spritesheet_index % 4])
self.first_time = pygame.time.get_ticks()
if keys[pygame.K_DOWN]:
self.vy = PLAYER_SPEED
self.second_time = pygame.time.get_ticks()
if self.second_time - self.first_time > self.delay:
self.image = (PAC_DOWN[self.spritesheet_index % 4])
self.first_time = pygame.time.get_ticks()