繁体   English   中英

为什么我的 pygame 在几秒钟后显示没有响应?

[英]Why does my pygame show not responding after a few seconds?

澄清一下,我完全不知道我在做什么,事实上我真的不确定我是怎么走到这一步的。 我编写了一些代码来充当 Minecraft 农场的自动点击器(是的,我知道您可以使用更简单的方法)。 我从各种教程中获取了一些零碎的内容,并自己完成了一些。 这有点乱。 但是,一旦代码运行并第一次单击 pygame window 显示没有响应。 我不知道为什么。 我将不胜感激任何建议和提示,如果我能打赌这个问题得到解决,那就太好了,谢谢!

我认为有些代码被我弄乱了,不知道如何很好地使用它:(

    import pygame
    import keyboard
    import time
    import pyautogui
    pygame.init()

    def Click():
        pyautogui.doubleClick(None, None, 1)
        print('Click')
        time.sleep(3)

    def Img(x, y):
        display_surface.blit(Piglin_Img, (x, y))


    white = (255, 255, 255)
    black = (0, 0, 0)

    x = 280
    y = 10
    X = 400
    Y = 100
    Piglin_Img = pygame.image.load('Piglin.png')
    pygame.display.set_icon(pygame.image.load("Icon.png"))
    display_surface = pygame.display.set_mode((X, Y ))
    pygame.display.set_caption('Gold Farm Auto Clicker')
    font = pygame.font.Font('freesansbold.ttf', 20)


    Start_Text = font.render('Press p to start...', True, black, white)
    Run_Text = font.render('Running...', True, black, white)
    Pause_Text = font.render('Paused', True, black, white)

    Start_Text_pos = (10, 10)
    Run_Text_pos = (10, 10)
    Pause_Text_pos = (10, 10)
    Continue_pos = (10, 40)

    display_surface.fill(white)
    display_surface.blit(Start_Text, Start_Text_pos)

    Clicker = False
    running = True

    while running:
     for event in pygame.event.get():
      Img(x, y)

      pygame.event.set_blocked(pygame.MOUSEMOTION)
      pygame.event.set_blocked(pygame.MOUSEBUTTONDOWN)
      pygame.event.set_blocked(pygame.MOUSEBUTTONUP)

       if event.type == pygame.QUIT or \
          event.type == pygame.KEYDOWN and \
          event.key == pygame.K_z:
            running = False

      if event.type == pygame.KEYDOWN and \
         event.key == pygame.K_p:
         print('started')
         display_surface.fill(white)
         display_surface.blit(Run_Text, Run_Text_pos)
         Img(x, y)
         pygame.display.update()
         Clicker = True


     while Clicker:
         if event.type == pygame.KEYDOWN and \
            event.key == pygame.K_x:
            Clicker = False
            display_surface.fill(white)
            display_surface.blit(Start_Text, Continue_pos)
            display_surface.blit(Pause_Text, Pause_Text_pos)
            Img(x, y)
            pygame.display.update()

        Click()
        if event.type == pygame.KEYDOWN and \
            event.key == pygame.K_x:
            Clicker = False
            display_surface.fill(white)
            display_surface.blit(Start_Text, Continue_pos)
            display_surface.blit(Pause_Text, Pause_Text_pos)
            Img(x, y)
            pygame.display.update()



 pygame.display.update()
pygame.quit()

Clicker变为 True 时,它会阻止事件队列处理。 因此,一旦点击器开始循环,就不会处理任何用户输入,因为此循环永远不会重新检查队列中的新事件,而只会继续重新处理相同的(旧)事件结果。

您可能需要将while Clicker原因中的事件处理合并到主事件循环中。 也许在这些事件上有一个if Clicker

pygame.event.set_blocked(pygame.MOUSEMOTION)
pygame.event.set_blocked(pygame.MOUSEBUTTONDOWN)
pygame.event.set_blocked(pygame.MOUSEBUTTONUP)

while running:
    # handle events and user interaction
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN :    # some key was pushed
            if event.key == pygame.K_p:
                print('started')
                Clicker = True               # start the clicker
            elif event.key == pygame.K_x:
                print('stopped')
                Clicker = False              # stop the clicker
            elif event.key == pygame.K_z:
                running = False              # Allow exit here too  


    # Update the screen
    if Clicker:
        # Click mode
        display_surface.fill(white)
        display_surface.blit(Run_Text, Run_Text_pos)
    else:
        # NOT in Click Mode
        display_surface.fill(white)
        display_surface.blit(Start_Text, Continue_pos)
        display_surface.blit(Pause_Text, Pause_Text_pos)

    Img(x, y)
    pygame.display.update()

反正也差不多。 如果没有注释,就无法立即清楚代码的意图是什么,因此很难创建一个严格的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM