Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在PyGame中单击鼠标进行记分计数器循环_Loops_Pygame_Click_Counter_Mouse - Fatal编程技术网

Loops 在PyGame中单击鼠标进行记分计数器循环

Loops 在PyGame中单击鼠标进行记分计数器循环,loops,pygame,click,counter,mouse,Loops,Pygame,Click,Counter,Mouse,我正在用PyGame编写一个测试游戏,并且有一个基于回合/阶段的系统(如Yu Gi Oh!),但是我遇到的问题是,当我想增加回合计数器(在绘图阶段)时,它会无限期地增加它,直到我再次按下鼠标以释放鼠标保持。有没有一种方法可以打破递增,在递增一次后直接进入下一个阶段? 我认为这个问题与游戏循环本身刷新速度如此之快有关。也许我可以冻结游戏循环?另一种选择是自动(不是通过鼠标点击)从一个回合切换到另一个回合,但我仍然需要按下按钮才能切换到下一阶段。有什么想法吗?我可以在游戏循环之外增加这个吗 #The

我正在用PyGame编写一个测试游戏,并且有一个基于回合/阶段的系统(如Yu Gi Oh!),但是我遇到的问题是,当我想增加回合计数器(在绘图阶段)时,它会无限期地增加它,直到我再次按下鼠标以释放鼠标保持。有没有一种方法可以打破递增,在递增一次后直接进入下一个阶段? 我认为这个问题与游戏循环本身刷新速度如此之快有关。也许我可以冻结游戏循环?另一种选择是自动(不是通过鼠标点击)从一个回合切换到另一个回合,但我仍然需要按下按钮才能切换到下一阶段。有什么想法吗?我可以在游戏循环之外增加这个吗

#The Game Phases (outside of the game loop): 
phases = "Coin Flip","Your Draw Phase", "Your Standby Phase", "Your Main Phase 1", "Your Battle Phase", "Your Main Phase 2", "Your End Phase", "Their Draw Phase", "Their Standby Phase", "Their Main Phase 1", "Their Battle Phase", "Their Main Phase 2", "Their End Phase" #enemy phases


#Code Inside the game loop: 
        #If phase = A Draw Phase then the Turn Counter increments.
        if phasecounter == 1: 
            turncounter += 1

        elif phasecounter == 7:
            turncounter += 1

        #A Mouse Click that can will change the Phase on the Screen (displayed by Text). 
        if event.type == pygame.MOUSEBUTTONDOWN:
                phasecounter += 1

            
            
       #Loops the Phases. 
        if phasecounter > 12: 
                    phasecounter = 1

        currentphase = phases[phasecounter]


在游戏循环中添加一个标志以跟踪鼠标按钮的单击。向下设置按钮上的标志,向上取消设置按钮上的标志。在按钮关闭事件上设置变量

请尝试此更新:

    mousedown = False  # above game loop

    #A Mouse Click that can will change the Phase on the Screen (displayed by Text). 
    if event.type == pygame.MOUSEBUTTONUP:
        mousedown = False
        
    if event.type == pygame.MOUSEBUTTONDOWN and not mousedown: # don't repeat
        mousedown = True
        phasecounter += 1
        if phasecounter in [1,7]:
            turncounter += 1
        if phasecounter > 12: 
            phasecounter = 1

    currentphase = phases[phasecounter]

多亏了Mike67,他的解决方案才大大解决了这个问题。然而,它仍然只是每2圈增加一次。我的解决方案是使阶段没有“你的”或“他们的”,只做一个布尔值来跟踪轮到谁了:

whoseturn = 0 #0 = your turn; 1 = their turn
phases = ["Next Turn","Draw Phase", "Standby Phase", "Main Phase 1", "Battle Phase", "Main Phase 2", "End Phase", "Draw Phase", "Standby Phase", "Main Phase 1", "Battle Phase", "Main Phase 2", "End Phase"]
然后打开转弯指示灯

if event.type == pygame.MOUSEBUTTONDOWN and not mousedown: # don't repeat
                mousedown = True
                mousedown = False
                phasecounter += 1
                if phasecounter == 0:
                    turncounter += 1
                if phasecounter == 7:
                    turncounter += 1
                    
                if phasecounter == 7: 
                    phasecounter = 0
                    
                
                    

        currentphase = phases[phasecounter]

因此,每个列表只需增加一次,而不是两次。现在,它在“下一个回合”中完美地递增。

回答得好,谢谢。然而,它仍然不是正确的位置,但我确实解决了它。我将把代码放在这个问题的答案中。