如何解决Pygame绘图元素顺序显示在屏幕上
我正在制作一个演示pygame中排序算法的应用程序。我需要在屏幕上一一绘制“元素”,以便用户可以看到发生了什么。我已经尝试过这样做,但是发生的是所有元素同时绘制在屏幕上。这一切都发生在initialize_elements()中。应该发生的是,创建了一个新元素,然后将其绘制到屏幕上,然后更新显示,以便用户可以看到由1逐个创建的单个元素。相反,所有元素都显示在屏幕上的同时。我尝试使用pygame.time.delay(100),但是没有用。我不知道如何阻止这种情况的发生。
这是我的代码:
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,255)
self.border = 5
self.surface = pygame.Surface([width_in,self.height])
self.surface.fill((self.color))
self.draw(screen,self.color,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))
else:
elements.append(Element(elements[i - 1].left + desired_width,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()
解决方法
在窗口中显示更新之前,您需要通过pygame.event.pump()
处理事件。
对于游戏的每一帧,您都需要对事件队列进行某种调用。这样可以确保您的程序可以与操作系统的其余部分进行内部交互。
如果要显示线条并延迟游戏,则必须更新显示并处理事件。
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,screen))
i += 1
pygame.display.flip()
pygame.time.delay(delay * 100) # 100 milliseconds = 0.1 second
pygame.event.pump()
,
您可以在画线的循环中调用sleep
。
尝试以下代码:
def initialize_elements(desired_width):
i = 0
while i < num_elements:
if i == 0:
elements.append(Element(screen_width / 5,screen))
else:
elements.append(Element(elements[i - 1].left + desired_width,screen))
i += 1
pygame.display.update()
time.sleep(.2) # add this line
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。