Pygame: после того, как я позволю go действия кнопки продолжать - PullRequest
0 голосов
/ 05 апреля 2020

Я уже сделал несколько проектов, но на этот раз я столкнулся с проблемой.
Я сделал тип игры, когда стрелка пересекает полосу, и вы нажимаете кнопку, чтобы остановить ее, и вы нацеливаете ее как можно ближе к середина.

Кнопка, которую нужно нажать, рандомизирована (w, a, s, d). Когда кнопка появляется 2 или более раз подряд, в другой раз она останавливает стрелку в первом кадре, как если бы она была нажата все время. Это то же самое, когда я заканчиваю мини-игру со стрелками, а я go в 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

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Здравствуйте, leon lukacevi c,

Я предлагаю добавить if event.type == pygame.MOUSEBUTTONUP с необходимым действием, это решит вашу проблему. Не имеет отношения к вашему вопросу, но вы снова позвонили for event in pygame.event.get() в l oop. Это может создать проблему в будущем. Пожалуйста, отметьте галочку, если вы нашли мой ответ полезным :)

0 голосов
/ 06 апреля 2020

Я никогда не возвращаю назад нажатую кнопку, поэтому она запоминает кнопку, нажатую с последней мини-игры (l oop)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...