列表追加不起作用(列表始终为空)
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))
总结评论:
范围接受三个参数
- 开始可选。一个整数,指定从哪个位置开始。默认为 0
- 停止必需。指定停止位置的整数(不包括在内)。
- 步骤可选。指定增量的整数。默认为 1
所以如果你想循环数字 1
到 5
,你只需要 Range(6)
因为可选的 start
参数默认为 0
和可选的 step
参数默认为 1
.
while i<=2:
将导致无限循环,因为 i
的值无法在循环内更改。一旦你进入它,它将永远持续下去。相反,你想要一个 if
和 elif
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
我正在制作游戏,我在 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))
总结评论:
范围接受三个参数
- 开始可选。一个整数,指定从哪个位置开始。默认为 0
- 停止必需。指定停止位置的整数(不包括在内)。
- 步骤可选。指定增量的整数。默认为 1
所以如果你想循环数字
1
到5
,你只需要Range(6)
因为可选的start
参数默认为0
和可选的step
参数默认为1
.while i<=2:
将导致无限循环,因为i
的值无法在循环内更改。一旦你进入它,它将永远持续下去。相反,你想要一个if
和elif
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