列表追加不起作用(列表始终为空)

list append not working (list always empty)

我正在制作游戏,我在 class 中创建了一个循环,该循环创建了一个列表,其中包含我需要的每个精灵 sheet。问题是,当我尝试 blit 列表的一个元素时,我总是得到错误:IndexError: list index out of range 这是 class 中函数的代码(简化):

    def sprites(self):
        i = 1
        boxwidth = 0
        boxwidthend = False
        sprites = []
        
        for i in range(1,0,5):
            while i <= 2:
                boxheight = 0
                spritesurface = pygame.Surface((self.width, self.heightside), pygame.SRCALPHA)
                spritesurface.blit(self.type, (0,0), (0 + boxwidth, 0, self.width, self.heightside))
                sprite = pygame.transform.scale(spritesurface, (self.width * self.scale, self.heightside * self.scale))
                sprites.append(sprite)

            while i <= 5:
                boxheight = 49
                if boxwidthend == False:
                    boxwidth = 0
                    boxwidthend = True
                spritesurface = pygame.Surface((self.width, self.heightup), pygame.SRCALPHA)
                spritesurface.blit(self.type, (0,0), (0 + boxwidth, boxheight, self.width, self.heightup))
                sprite = pygame.transform.scale(spritesurface, (self.width * self.scale, self.heightup * self.scale))
                sprites.append(sprite)
            boxwidth += 25
            i += 1

      return sprites

这是主要代码部分(已简化):

sprites_class = GetSprites("human", 3)
spritelist = sprites_class.sprites()
while True:
   ROOT.blit(spritelist[3], (playermovement.x, playermovement.y))

总结评论:

  1. 范围接受三个参数

    • 开始可选。一个整数,指定从哪个位置开始。默认为 0
    • 停止必需。指定停止位置的整数(不包括在内)。
    • 步骤可选。指定增量的整数。默认为 1

    所以如果你想循环数字 15,你只需要 Range(6) 因为可选的 start 参数默认为 0 和可选的 step 参数默认为 1.

  2. while i<=2: 将导致无限循环,因为 i 的值无法在循环内更改。一旦你进入它,它将永远持续下去。相反,你想要一个 ifelif


def sprites(self):
    
    boxwidth = 0
    boxwidthend = False
    sprites = []
    
    for i in range(6):
        if i <= 2:
            print("i <= 2")
            boxwidth += 1
            boxheight = 0
            spritesurface = pygame.Surface((self.width, self.heightside), pygame.SRCALPHA)
            spritesurface.blit(self.type, (0,0), (0 + 25 * boxwidth, 0, self.width, self.heightside))
            sprite = pygame.transform.scale(spritesurface, (self.width * self.scale, self.heightup * self.scale))
            sprites.append(sprite)

        elif i <= 5:
            print("i > 2")
            boxheight = 48
            if boxwidthend == False:
                boxwidth = 0
                boxwidthend = True
            spritesurface = pygame.Surface((self.width, self.heightup), pygame.SRCALPHA)
            spritesurface.blit(self.type, (0,0), (0 + 25 * boxwidth, boxheight, self.width, self.heightup))
            sprite = pygame.transform.scale(spritesurface, (self.width * self.scale, self.heightup * self.scale))
            sprites.append(sprite)
    return sprites