首页 > 解决方案 > 如何显示屏幕并使其留在pygame中?

问题描述

我正在制作一部视觉小说作为我的项目。我决定不使用 renPy,因为它会缩短代码太多。目前,我正在尝试在用户单击下一个按钮时显示下一行文本。但是,该按钮不起作用。没有错误,但 python 不会检测到我的点击。

def main_game():
    running = True
    while running:
         screen.fill(black)
         s = pygame.Surface((1280, 200))
         s.set_alpha(50)                
         s.fill((white))

         screen.blit(s, (0,520))
         draw_text("", font2, purple, screen, 2, 522)
         draw_text("Before beginning your journey, please give yourself a name.", font3, white, screen, 15, 580)

         mx, my = pygame.mouse.get_pos()

         button_next = pygame.Rect(1117, 650, 150, 50)

         if button_next.collidepoint((mx, my)):
            if click:
                next_story()

         pygame.draw.rect(screen, (white), button_next)

         font = pygame.font.Font("PixelDigivolve-mOm9.ttf", 30)
         text_next = font.render("NEXT", 1, (black))
         screen.blit(text_next, (1157, 655))

         click = False
         for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
               if event.key == pygame.MOUSEBUTTONDOWN:
                    if event.button == 1:
                        click = True

         pygame.display.update()
         mainClock.tick(60)

这是下一个屏幕的代码

def next_story():
    screen.fill(black)
    s = pygame.Surface((1280, 200))
    s.set_alpha(50)                
    s.fill((white))           
    screen.blit(s, (0,520))
    draw_text("", font2, purple, screen, 2, 522)
    draw_text("What shall you name yourself?", font3, white, screen, 15, 580)
    pygame.display.update()
    mainClock.tick(60)

标签: pythonpygame

解决方案


从提供的代码:在鼠标单击click时变为,但您每次都执行它,因此它立即变为下一个周期。删除这行代码并测试它。如果您需要重置此标志,请将其放入另一个具有新逻辑的标志中。也从:Trueclick = FalseFalseifnext_story()

pygame.display.update()
    mainClock.tick(60)

你只需要一次,在主循环中。希望这能解决问题。


推荐阅读