【问题标题】:List index out of range syntax error列表索引超出范围语法错误
【发布时间】:2018-01-16 20:37:12
【问题描述】:

我正在通过 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

下一行代码是出现索引超出范围错误的地方。它位于__init__ 子例程的player1 类中。这行代码在列表的位置 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))

【问题讨论】:

  • 完整代码可以查看:hastebin.com/isivuxozeb.rb
  • 您的系统上是否确实存在该路径?
  • 最好能向我们展示less 代码而不是more。请创建一个minimal reproducible example 来演示删除所有无关代码的问题。 MCVE 不需要做任何有意义的事情;它只需要有同样的问题。
  • @internet_user 路径正确
  • 对于我添加的这段代码,您有什么建议或解决方案吗? @JohnKugelman

标签: python list pygame index-error


【解决方案1】:

该错误与 Pygame 无关。您致电glob

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

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

【讨论】:

  • 是的,检查路径是否被编辑或更改,但一切都正确
  • 您应该检查代码本身。你从哪里运行解释器?你如何开始代码?尝试在 glob 调用中放置一个调试断点,并尝试找出它正在尝试读取的实际目录。
  • 我熟悉解释器,但不确定在哪里找到它的运行点。另外,当提到 debug breakpoint 时,您的意思是添加打印语句以评估其尝试读取的目录吗?
  • 我似乎无法弄清楚为什么它在被调用时突然返回一个空数组,昨天一切正常,此后没有任何编辑。
  • jetbrains.com/help/pycharm/breakpoints.html。 PyCharm 网站上的这篇文章解释了断点是什么以及如何在 PyCharm(似乎是最流行的 Python IDE)中使用它们。 注意:您不需要 IDE 即可成功调试您的程序。 IDE 只是让事情变得更容易.
猜你喜欢
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2016-01-06
相关资源
最近更新 更多