Pygame animation - IndexError: list index out of range
Pygame animation - IndexError: list index out of range
我正在使用 pygame 为我的游戏创建敌人 class。我为我的敌人制作了 9 张动画图像,这样看起来敌人实际上在移动。我写下了我的代码,但是当我 运行 它时,它说:
IndexError: list index out of range
任何人都可以帮我弄清楚我必须在代码中更改什么吗?预先感谢。错误在 self.image = self.imagesright[self.frame//self.ani]
.
行
这是我的敌人class:
class Enemy(pygame.sprite.Sprite):
'''
Spawn an enemy
'''
def __init__(self, enemy_list):
pygame.sprite.Sprite.__init__(self)
self.health = 50
self.frame = 0
self.alpha = (0,0,0)
self.ani = 2 # animation cycles
self.enemy_list = enemy_list
self.add(self.enemy_list)
self.counter = 0 # counter variable
self.imagesleft = []
self.imagesright = []
for i in range(1,10):
img = pygame.image.load(os.path.join('images','Bot' + str(i) + '.png')).convert()
img.convert_alpha()
img.set_colorkey(self.alpha)
self.imagesleft.append(img)
self.image = self.imagesleft[0]
self.rect = self.image.get_rect()
for i in range(1,10):
img = pygame.image.load(os.path.join('images','Bot' + str(i) + '.png')).convert()
img = pygame.transform.flip(img, True, False)
img.convert_alpha()
img.set_colorkey(self.alpha)
self.imagesright.append(img)
self.image = self.imagesright[0]
self.rect = self.image.get_rect()
def move(self):
'''
enemy movement
'''
distance = 30
speed = 10
if self.counter >= 0 and self.counter <= distance:
self.rect.x += speed
self.frame += 1
if self.frame > 9*self.ani:
self.frame = 0
self.image = self.imagesright[self.frame//self.ani]
elif self.counter >= distance and self.counter <= distance*2:
self.rect.x -= speed
self.frame += 1
if self.frame > 9*self.ani:
self.frame = 0
self.image = self.imagesleft[self.frame//self.ani]
else:
self.counter = 0
self.counter += 1
def update(self, dt, all_sprites):
bullet_list = pygame.sprite.spritecollide(self, all_sprites, True)
for bullets in bullet_list:
self.health -= 10
print(self.health)
if self.health <= 0:
self.kill()
self.frame
的值为 [0, 18]
self.ani
的值为 2
self.imagesright
有 9 个元素(值从 0-8)
因此:
self.frame//self.ani
取值从 0
(0 // 2) 到 9
(18 // 2).
9
超出了该列表的范围。
我正在使用 pygame 为我的游戏创建敌人 class。我为我的敌人制作了 9 张动画图像,这样看起来敌人实际上在移动。我写下了我的代码,但是当我 运行 它时,它说:
IndexError: list index out of range
任何人都可以帮我弄清楚我必须在代码中更改什么吗?预先感谢。错误在 self.image = self.imagesright[self.frame//self.ani]
.
这是我的敌人class:
class Enemy(pygame.sprite.Sprite):
'''
Spawn an enemy
'''
def __init__(self, enemy_list):
pygame.sprite.Sprite.__init__(self)
self.health = 50
self.frame = 0
self.alpha = (0,0,0)
self.ani = 2 # animation cycles
self.enemy_list = enemy_list
self.add(self.enemy_list)
self.counter = 0 # counter variable
self.imagesleft = []
self.imagesright = []
for i in range(1,10):
img = pygame.image.load(os.path.join('images','Bot' + str(i) + '.png')).convert()
img.convert_alpha()
img.set_colorkey(self.alpha)
self.imagesleft.append(img)
self.image = self.imagesleft[0]
self.rect = self.image.get_rect()
for i in range(1,10):
img = pygame.image.load(os.path.join('images','Bot' + str(i) + '.png')).convert()
img = pygame.transform.flip(img, True, False)
img.convert_alpha()
img.set_colorkey(self.alpha)
self.imagesright.append(img)
self.image = self.imagesright[0]
self.rect = self.image.get_rect()
def move(self):
'''
enemy movement
'''
distance = 30
speed = 10
if self.counter >= 0 and self.counter <= distance:
self.rect.x += speed
self.frame += 1
if self.frame > 9*self.ani:
self.frame = 0
self.image = self.imagesright[self.frame//self.ani]
elif self.counter >= distance and self.counter <= distance*2:
self.rect.x -= speed
self.frame += 1
if self.frame > 9*self.ani:
self.frame = 0
self.image = self.imagesleft[self.frame//self.ani]
else:
self.counter = 0
self.counter += 1
def update(self, dt, all_sprites):
bullet_list = pygame.sprite.spritecollide(self, all_sprites, True)
for bullets in bullet_list:
self.health -= 10
print(self.health)
if self.health <= 0:
self.kill()
self.frame
的值为 [0, 18]
self.ani
的值为 2
self.imagesright
有 9 个元素(值从 0-8)
因此:
self.frame//self.ani
取值从 0
(0 // 2) 到 9
(18 // 2).
9
超出了该列表的范围。