我一直在尝试在pygame中创建一个下拉菜单。我有一个方法,它采用一个字符串列表,并使用for循环将它们呈现到屏幕上。 for循环如下所示。
spacer = 0
for text in range(5):
spacer += 30
rect = pygame.Rect(0, spacer, 100, 20)
pygame.draw.rect(self.surface, (255, 0, 0), rect)
self.rect_list.append(rect)
我将在for循环中创建的每个矩形附加到列表rect_list
。
然后我将列表打印到屏幕上以查看其内容。 Python IDLE窗口被垃圾邮件列入了列表的内容。
for循环中包含的方法是在另一个类Menu
的第二个方法中调用的。类Menu
中的方法在while循环中调用:
while running:
for event in pygame.event.get():
if event.type == pg.QUIT:
running = False
pygame.quit()
quit()
#--------method being called in while loop----------#
Menu_Class_Obj.render_menu()
#--------method being called in while loop----------#
pygame.display.update()
答案 0 :(得分:1)
每次呈现菜单时,您都会追加menu_items_rect_list
。无论你在该列表中放置什么,都将无限期地留在那里。如果您希望列表开头的列表为空,则需要自己清除它。
答案 1 :(得分:0)
一旦我真正想到了什么是唠叨,我的问题的答案就非常明显了。由于我在while循环中调用包含for循环的方法,因此for循环正在多次运行。我用于此问题的两个解决方案是: 1.设置列表中可以有多少项的限制:
if len(self.rect_list) > 5):
self.rect_list = self.rect_list[:5]
和两个;删除任何更多的元素,然后删除指定的数字:
if len(self.text_rect_list) > len(self.sub_items):
del self.text_rect_list[:len(self.sub_items)]