为什么我的角色动画超出范围

问题描述

我正在尝试使动画效果更适合我的角色。但是,当我运行游戏时,我按下键即可打孔,当动画完成时,游戏会出现错误

\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