Как одним щелчком мыши перейти на другую страницу в Pygame? - PullRequest
0 голосов
/ 08 декабря 2018

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

Вот что у меня есть:

import pygame

pygame.init()
pygame.font.init()
# defining the screen
SIZE = (1000, 700)
screen = pygame.display.set_mode(SIZE)
# define time
clock = pygame.time.Clock()
#define button
button = 0
# define font
fontIntro = pygame.font.SysFont("Times New Roman",30)
# define draw scene
def drawIntro(screen):
    #start
    if button > 0:
        screen.fill((0, 0, 0))
        text = fontIntro.render("Sigle click to start", 1, (255,255,255))
        screen.blit(text, (300, 300, 500, 500))
        pygame.display.flip() 

    #page1
    if button == 1:
        screen.fill((0, 0, 0))
        text = fontIntro.render("page 1", True, (255, 255, 255))
        pygame.display.flip()
    #page2
    if button == 1:
        screen.fill((0, 0, 0))
        text = fontIntro.render("page 2", True, (255, 255, 255))
        screen.blit(text, (300,220,500,200))
        pygame.display.flip()
    #page3
    if button == 1:
        screen.fill((0, 0, 0))
        text = fontIntro.render("page3", True, (255, 255, 255))
        screen.blit(text, (200,190,500,200))
        pygame.display.flip()


running = True
while running:
    for evnt in pygame.event.get():
        if evnt.type == pygame.QUIT:
            running = False
        if evnt.type == pygame.MOUSEMOTION:
            mx,my = evnt.pos
            print(evnt.pos)
            drawIntro(screen)

pygame.quit()

Хотя это не работает, может кто-нибудь помочь, пожалуйста ?!Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Вам нужно увеличить счетчик button, когда пользователь нажимает кнопку мыши.

Функция drawIntro должна вызываться не в цикле событий один раз для события pygame.MOUSEMOTION, а в основном цикле while.Кроме того, измените MOUSEMOTION на MOUSEBUTTONDOWN, чтобы увеличить button один раз за клик.

Условия в функции drawIntro неверны.

import pygame


pygame.init()
SIZE = (1000, 700)
screen = pygame.display.set_mode(SIZE)
clock = pygame.time.Clock()
button = 0
fontIntro = pygame.font.SysFont("Times New Roman",30)


def drawIntro(screen):
    #start
    if button == 0:  # == 0
        screen.fill((0, 0, 0))
        text = fontIntro.render("Sigle click to start", 1, (255,255,255))
        screen.blit(text, (300, 300, 500, 500))
    elif button == 1:  #page1
        screen.fill((0, 0, 0))
        text = fontIntro.render("page 1", True, (255, 255, 255))
        screen.blit(text, (300,220,500,200))
    elif button == 2:  #page2
        screen.fill((0, 0, 0))
        text = fontIntro.render("page 2", True, (255, 255, 255))
        screen.blit(text, (300,220,500,200))
    elif button == 3:  #page3
        screen.fill((0, 0, 0))
        text = fontIntro.render("page3", True, (255, 255, 255))
        screen.blit(text, (200,190,500,200))


running = True
while running:
    for evnt in pygame.event.get():
        if evnt.type == pygame.QUIT:
            running = False
        if evnt.type == pygame.MOUSEBUTTONDOWN:  # Once per click.
            button += 1

    drawIntro(screen)
    pygame.display.flip()

pygame.quit()
0 голосов
/ 08 декабря 2018

Вы определяете button = 0 в начале, но никогда не меняете его значение в своем основном цикле.В вашей функции drawIntro вы проверяете if button > 0 или if button == 1 Так что очевидно, что вы никогда не выполните ни одного из этих if операторов.

Вам нужно поймать кнопку мыши, вызвав pygame.mouse.get_pressed() и выяснить, какчтобы правильно переключиться на следующую страницу.

Кстати, у вас также есть if button == 1 три раза, что, как я полагаю, не то, что вы хотите, потому что операторы if будут выполняться сразу же после их записи., так что ваша страница 3 будет показана сразу.Вам нужен счетчик, чтобы отслеживать, какую страницу нужно показывать при следующем нажатии кнопки мыши.

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