Python Pygame绘图元素按顺序显示在屏幕上

Python Pygame绘图元素按顺序显示在屏幕上,python,pygame,Python,Pygame,我正在制作一个应用程序,演示pygame中的排序算法。我需要在屏幕上逐个绘制元素,以便用户可以看到正在发生的事情。我尝试过这样做,但结果是所有元素都同时在屏幕上绘制。这一切都发生在初始化元素中。应该做的是创建一个新元素,然后将其绘制到屏幕上,然后更新显示,以便用户可以看到逐个创建的单个元素。相反,所有元素同时出现在屏幕上。我尝试过使用pygame.time.delay100,但没有成功。我不知道如何阻止这一切的发生 这是我的密码: import pygame import random cla

我正在制作一个应用程序,演示pygame中的排序算法。我需要在屏幕上逐个绘制元素,以便用户可以看到正在发生的事情。我尝试过这样做,但结果是所有元素都同时在屏幕上绘制。这一切都发生在初始化元素中。应该做的是创建一个新元素,然后将其绘制到屏幕上,然后更新显示,以便用户可以看到逐个创建的单个元素。相反,所有元素同时出现在屏幕上。我尝试过使用pygame.time.delay100,但没有成功。我不知道如何阻止这一切的发生

这是我的密码:

import pygame
import random

class Element:

    def __init__(self, left_in, width_in, screen_height, screen):
        self.top = 0
        self.left = left_in
        self.height = random.randrange(screen_height / 4, screen_height * 0.75)
        self.color = (0,0,255)
        self.border = 5
        self.surface = pygame.Surface([width_in, self.height])
        self.surface.fill((self.color))
        self.draw(screen, self.color, left_in, 0)

    def draw(self, screen, color, x, y):
        screen.blit(self.surface, (self.left, self.top))


screen_width = 1400
screen_height = 900
screen = pygame.display.set_mode((screen_width, screen_height))

num_elements = 20 # Will be determined at start screen

def main():
    pygame.init()
    
    clock = pygame.time.Clock()
    FPS = 30
    
    elements = []
    
    pygame.display.set_caption("Sorting Visualization")

    screen.fill((255, 255, 255))

    def initialize_elements(desired_width):
        i = 0
        while i < num_elements:
            if i == 0:
                elements.append(Element(screen_width / 5, desired_width, screen_height, screen))
            else:
                elements.append(Element(elements[i - 1].left + desired_width, desired_width, 
                                        screen_height, screen))
            i += 1
            pygame.display.update()

    # Initializing Elements
    desired_width = (screen_width - (2/5)*screen_width) / num_elements
    initialize_elements(desired_width)
    
    while(True):
        clock.tick(FPS)
        
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        pygame.display.update()
            
        
main()
您可以在绘制线条的循环中调用sleep

请尝试以下代码:

def initialize_elements(desired_width):
    i = 0
    while i < num_elements:
        if i == 0:
            elements.append(Element(screen_width / 5, desired_width, screen_height, screen))
        else:
            elements.append(Element(elements[i - 1].left + desired_width, desired_width, 
                                    screen_height, screen))
        i += 1
        pygame.display.update()
        time.sleep(.2)   # add this line
您可以在绘制线条的循环中调用sleep

请尝试以下代码:

def initialize_elements(desired_width):
    i = 0
    while i < num_elements:
        if i == 0:
            elements.append(Element(screen_width / 5, desired_width, screen_height, screen))
        else:
            elements.append(Element(elements[i - 1].left + desired_width, desired_width, 
                                    screen_height, screen))
        i += 1
        pygame.display.update()
        time.sleep(.2)   # add this line

在显示的更新在窗口中可见之前,您需要处理事件

见:

对于游戏的每一帧,您都需要对事件队列进行某种调用。这确保了您的程序可以在内部与操作系统的其余部分交互

如果你想显示线和延迟游戏,那么你必须更新显示和处理事件

而i在显示的更新在窗口中可见之前,您需要处理事件

见:

对于游戏的每一帧,您都需要对事件队列进行某种调用。这确保了您的程序可以在内部与操作系统的其余部分交互

如果你想显示线和延迟游戏,那么你必须更新显示和处理事件

而i您是否考虑过在主循环开始之前创建元素列表,然后在正确的时间调用Element.draw?我认为部分问题在于Element类希望直接绘制到屏幕上作为Element的一部分。您是否考虑过在主循环开始之前创建一个元素列表,然后在正确的时间调用Element.draw?我认为部分问题在于元素类希望作为元素的一部分直接绘制到屏幕上。\uuu init\uu如果没有事件处理,此代码将无法工作。如果没有事件处理,此代码将无法工作。如果没有事件处理,此代码将无法工作。