问题描述
我正在尝试使动画效果更适合我的角色。但是,当我运行游戏时,我按下键即可打孔,当动画完成时,游戏会出现错误
\Desktop\python projects\Ultamate Brawl\Ultamite BRAWL.py",line 41,in redrawGameWindow win.blit(PunchR[punchcount//2],(xcor,ycor)) IndexError: list index out of range [Finished in 6.4s]
我看着我的代码,看起来很好
def redrawGameWindow():
global punchcount
global walkcount
win.blit(bg,(-70,0))
if walkcount + 1 >= 27:
walkcount = 0
if punch == True:
if punchcount > 49:
punchcount = 1
win.blit(PunchR[punchcount//2],ycor))
punchcount += 1
elif isjump:
win.blit(superjump,ycor))
elif left:
if walkcount > 49:
walkcount = 1
win.blit(walkLeft[walkcount//4],ycor))
walkcount += 1
elif right:
win.blit(walkRight[walkcount//4],ycor))
walkcount += 1
else:
win.blit(char,ycor))
pygame.display.update()
解决方法
我建议按len()
评估列表PunchR
中的元素数量。如果订阅将超出范围,则设置punchcount=0
。因此,您的算法与列表的长度无关:
if punchcount//2 >= len(PunchR):
punchcount = 0
win.blit(PunchR[punchcount//2],(xcor,ycor))
punchcount += 1
如果只想运行一次动画,则必须在到达列表末尾时设置punch = False
:
if punch == True:
if punchcount//2 >= len(PunchR):
punchcount = 0
punch = False
win.blit(PunchR[punchcount//2],ycor))
punchcount += 1