没有过渡到下一个for循环

时间:2018-11-04 23:46:46

标签: python python-3.x pygame

我希望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 :(得分:0)

我不确定目标是什么,但是我可以解决您遇到的问题。这些页面不会转换,因为即使您正在注册按键,也不会更新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()

我取出了所有随机的东西,并修改了代码,向您展示了一个简单的页面切换程序,用户可以在其中按下按钮并切换显示的页面。从那里,您可以添加回随机的东西。要注意的关键是页面被标记为知道要显示的页面。