在 for 循环中不转换到下一个
Posted
技术标签:
【中文标题】在 for 循环中不转换到下一个【英文标题】:Not transitioning to next in for loop 【发布时间】:2018-11-04 23:46:46 【问题描述】:当按下正确的提示按钮时,我希望 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】:我不确定目标是什么,但我可以解决您遇到的问题。页面没有转换,因为即使您正在注册按键,您也没有更新要在 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()
我取出了所有随机的东西并修改了代码,向您展示了一个简单的页面切换程序,用户按下按钮并切换显示的页面。从那里你可以添加回随机的东西。需要注意的关键是页面被标记以知道要显示哪个页面。
【讨论】:
以上是关于在 for 循环中不转换到下一个的主要内容,如果未能解决你的问题,请参考以下文章