首页 > 解决方案 > Pygame:在我放开按钮后,动作继续进行

问题描述

我已经做了几个项目,但是这次我遇到了一个问题。
当箭头穿过条形时,我制作了一个游戏类型,您单击一个按钮将其停止,并将其瞄准靠近中间。

您需要按下的按钮是随机的(w、a、s、d)。当一个按钮连续出现 2 次或更多次时,其他时间它会在第一帧中停止箭头,就像它一直被按下一样。当我完成箭头迷你游戏并进入类似 2D RPG 的游戏时也是如此。它继续朝着我上次按下的方向移动,就像按钮被卡住一样。

当我再次按下它时,它停止并且我可以自由移动。

如果你想看,我可以包含代码,但它又长又复杂,所以如果没有必要,我不想让你看整个事情。
如果您可以提供帮助或有任何问题,请写下来,谢谢。

编辑:我包含了箭头迷你游戏正在进行的部分代码,如果你想要一个完整版本,它大约是 200 行。谢谢。

    while borba:
        if enemyhp<=0:
            break

        crtanjeploceborbe()
        crtanjeenemyhealthbar(enemyhp)
        crtanjeneprijatelja((300+500)/2-100/2,10,neprijateljnb)
        pygame.display.update()
        mis=pygame.mouse.get_pos()
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                quit()
            if event.type==pygame.MOUSEBUTTONDOWN:
                if mis[0]<fightbuttonpos[2] and mis[0]>fightbuttonpos[0] and mis[1]<fightbuttonpos[1] and mis[1]>fightbuttonpos[3]:                            
                    fightmeterx=random.randint(actionspaceavailablex[0]-1,actionspaceavailablex[1])
                    fightmetery=random.randint(actionspaceavailabley[0]-1,actionspaceavailabley[1])
                    button=random.choice(["w","a","s","d"])
                    poztipke=fightmeterx-45
                    brzinatipke=2.5
                    natezanje=True                   
                    while natezanje:

                        if poztipke>=fightmeterx+380-45:
                            poztipke=fightmeterx+380-45
                            pygame.time.wait(2500)
                            dmg=5
                            break
                        for event in pygame.event.get():

                            if event.type==pygame.KEYDOWN:
                                if event.key==pygame.K_w:
                                    buttonpress="w"
                                elif event.key==pygame.K_a:
                                    buttonpress="a"
                                elif event.key==pygame.K_d:
                                    buttonpress="d"
                                elif event.key==pygame.K_s:
                                    buttonpress="s"
                            if buttonpress==button:

                                if poztipke+45<=fightmeterx+104 or poztipke>=fightmeterx+344:
                                    dmg=5
                                elif poztipke+45<=fightmeterx+190 or poztipke>=fightmeterx+302:
                                    dmg=10
                                elif poztipke+45<=fightmeterx+261: 
                                    dmg=20
                                else:
                                    dmg=40
                                pygame.time.wait(1500)
                                borba=True
                                natezanje=False         
                        crtanjeploceborbe()
                        crtanjeenemyhealthbar(enemyhp)
                        crtanjeneprijatelja((300+500)/2-100/2,10,neprijateljnb)
                        crtanjefightmetera(fightmeterx,fightmetery)
                        if button == "w":
                            crtanjewtipke(poztipke,fightmetery-90)
                        elif button == "a":
                            crtanjeatipke(poztipke,fightmetery-90)
                        elif button == "s":
                            crtanjestipke(poztipke,fightmetery-90)
                        else:
                            crtanjedtipke(poztipke,fightmetery-90)
                        pygame.display.update()
                        brzinatipke=brzinatipke*1.015
                        poztipke+=brzinatipke
                    enemyhp-=dmg

标签: pygame

解决方案


我从不改回按下的按钮,所以它会记住上次迷你游戏(循环)按下的按钮


推荐阅读