Не переходя к следующему циклу for - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу, чтобы интерфейс pygame переключался на новую страницу (с порядка страниц, который определяется случайным образом), когда нажимаются кнопки с правой кнопкой. Во время инициализации страница не переходит к следующей странице, указанной в цикле for. В качестве альтернативы, помещение всего в цикл while true просто циклически повторяет содержимое func1 и func2 безотносительно к нажатию клавиш. Любое понимание будет оценено.

Запуск на Python 3x и pygame 1.9.5

import pygame
from pygame.locals import *
import random

control1 = 0
control2= 0

pygame.init()

display_width = 500
display_height = 500

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

gd = pygame.display.set_mode((display_width,display_height))

myfont = pygame.font.SysFont("Arial", 30)

pygame.event.pump()

def func1():
    global control1
    control1 = 1
    gd.fill(white)
    letter = myfont.render("Press w",0,(black))
    gd.blit(letter,(100,100))
    pygame.display.flip()

def func2():
    global control2
    control2 = 1
    gd.fill(white)
    letter = myfont.render("Press d",0,(black))
    gd.blit(letter,(100,100))
    pygame.display.flip()

my_sample = random.sample(range(2), 2)

for i in my_sample:
    if my_sample[i] == 0:
        func1()
        if control1 == 0:
            continue
    if my_sample[i] == 1:
        func2()
        if control2 == 0:
            continue
while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            quit()

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_w and control1 == 1:
            control1 = 0

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_d and control2 == 1:
            control2 = 0

    pygame.display.update()

1 Ответ

0 голосов
/ 05 ноября 2018

Я не совсем уверен, какова цель, но я могу решить проблемы, которые у вас есть. Страницы не переходят, потому что, даже если вы регистрируете нажатия клавиш, вы не обновляете, какая страница должна отображаться в цикле while. Вы правы в том, что помещение всего в цикл while просто бесконечно зацикливается между func1 () и func2 (), потому что вам также нужны флаги для указания того, что отображать. Вы смотрите, чтобы все части, но не обязательно в нужном месте.

import pygame
from pygame.locals import *

pygame.init()

display_width = 500
display_height = 500

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

gd = pygame.display.set_mode((display_width,display_height))

myfont = pygame.font.SysFont("Arial", 30)

pygame.event.pump()

def func1():
    global control1
    control1 = 1
    gd.fill(white)
    letter = myfont.render("Press d",0,(black))
    gd.blit(letter,(100,100))
    pygame.display.flip()

def func2():
    global control2
    control2 = 1
    gd.fill(white)
    letter = myfont.render("Press s",0,(black))
    gd.blit(letter,(100,100))
    pygame.display.flip()

def func3():
    global control2
    control2 = 1
    gd.fill(white)
    letter = myfont.render("Press w",0,(black))
    gd.blit(letter,(100,100))
    pygame.display.flip()

page1 = True
page2 = False
page3 = False

while True:    
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            quit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                page1 = True
                page2 = False
                page3 = False
            if event.key == pygame.K_d:
                page1 = False
                page2 = True
                page3 = False
            if event.key == pygame.K_s:
                page1 = False
                page2 = False
                page3 = True    
    if page1:
        func1()
    elif page2:
        func2()
    elif page3:
        func3()

    pygame.display.update()

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

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