在 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 循环中不转换到下一个的主要内容,如果未能解决你的问题,请参考以下文章

for循环中的错误1004如何转到下一个函数[重复]

for循环后的最后一个过程语句在pl sql中不起作用

简单的for循环在python中不起作用

范围在 for 循环中不起作用

for 循环中的代码在 ngOnInt() 中不起作用

Liquid - if contains 语句在 for 循环中不起作用