2

我正在通过 pygame 创建 2D 战斗。当我第一次开始编写游戏时发生的一个错误已经回到了之前的同一行代码中,我设法修复了它,但这次我不确定如何解决解决方案。

class player:
    def __init__(self):
        self.x = 200
        self.y = 300
        self.y_change = 0
        self.ani_speed_init = 8
        self.ani_speed = self.ani_speed_init
        self.ani_stand =glob.glob("characters\\Naruto\\Standing\\naruto_s*.png")
        self.ani_stand.sort()
        self.moving = True
        self.ani_pos=0
        self.ani_max = len(self.ani_stand)-1

下一行代码是发生索引超出范围错误的地方。这位于子例程的player1类中。__init__这行代码在列表的位置 0 加载图像。

self.img_stand = pygame.image.load(self.ani_stand[0])
self.ani_walk = glob.glob("characters\\Naruto\\Walk\\naruto_w*.png")
self.ani_walk.sort()
self.ani_pos=0
self.ani_max_walk = len(self.ani_walk)-1

如果添加了新帧,则找出有多少帧以及何时达到最大数量循环回到精灵数组中的零。

self.img_walk = pygame.image.load(self.ani_walk[0])
self.img = pygame.image.load(self.ani_stand[0])
self.jumping = False
self.velocity_index = 0
self.rect = self.img.get_rect()
self.count = 0
self.update(0)

这是播放器 1 类中的更新函数。这部分代码是我之前第一次设法修改错误的地方。

def update(self,pos):
    if pos != 0: 
        self.ani_speed-=1
        self.x+=pos

        if self.ani_speed == 0:
            self.img = pygame.image.load(self.ani_walk[self.ani_pos])
            self.ani_speed = self.ani_speed_init
            if self.ani_pos == self.ani_max_walk:
                self.ani_pos = 0
            else:
                self.ani_pos += 1

这个else块,位于update函数中,是用于解决解决方案的特定代码部分,但我似乎想不出更多的逻辑解决方案来修复错误。

else:
    self.ani_speed-=1
    if self.moving: 
        self.ani_speed = self.ani_speed_init
        if self.count==8:
            if self.ani_pos >= self.ani_max:
                self.ani_pos = 1
            else:
                self.ani_pos+=1
        elif self.ani_pos>3:
            self.ani_pos=1

        self.img = pygame.image.load(self.ani_stand[self.ani_pos-1])
gameDisplay.blit(self.img,(self.x,self.y))
4

1 回答 1

2

该错误与 Pygame 无关。您的来电glob

glob.glob("characters\\Naruto\\Standing\\naruto_s*.png")

返回一个空数组。检查您的脚本在哪个目录中执行,以及指定路径下的文件是否实际存在。

于 2018-01-16T12:37:12.253 回答