【问题标题】:Not transitioning to next in for loop在 for 循环中不转换到下一个
【发布时间】: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()

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案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()
    

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

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2022-07-21
      • 2021-07-17
      • 2021-10-15
      相关资源
      最近更新 更多