【问题标题】:Deleting/Removing the first N or last N from a sprites.Group()从 sprites.Group() 中删除/删除第一个 N 或最后一个 N
【发布时间】:2013-04-18 13:07:18
【问题描述】:

假设您有一个精灵组,并且您向其中添加了一堆东西:

all_shelfs = pygame.sprite.Group()
shelf_tracking_list = []

#making shelfs
build_lvl = HEIGHT - 150
#group A
for i in xrange(100):
    wid = random.randint(120,320)
    pos = [random.randint(0, WIDTH-wid), random.randint(build_lvl-20, build_lvl), wid]
    all_shelfs.add(Shelf(pos[0],pos[1], pos[2]))
    build_lvl = build_lvl - 60

#group B
for i in xrange(100):
    wid = random.randint(120,320)
    pos = [random.randint(0, WIDTH-wid), random.randint(build_lvl-20, build_lvl), wid]
    all_shelfs.add(Shelf(pos[0],pos[1], pos[2]))
    build_lvl = build_lvl - 60
#group C
for i in xrange(100):
    wid = random.randint(120,320)
    pos = [random.randint(0, WIDTH-wid), random.randint(build_lvl-20, build_lvl), wid]
    all_shelfs.add(Shelf(pos[0],pos[1], pos[2]))
    build_lvl = build_lvl - 60

shelf_tracking_list = all_shelfs.sprites()

例如,我如何删除 A 组? 这是我添加的第一组。我注意到我无法真正使用这个shelf_tracking_list 修改组

【问题讨论】:

    标签: python python-2.7 pygame


    【解决方案1】:

    如果您要跟踪每个组中的精灵,您可以使用sprite.Group.remove(*sprites) 函数来删除整个组,如以下文档中所述:http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Group.remove

    # group A
    group_a = list()
    for i in xrange(100):
        wid = random.randint(120,320)
        pos = [random.randint(0, WIDTH-wid), random.randint(build_lvl-20, build_lvl), wid]
        new_shelf = Shelf(pos[0], pos[1], pos[2])
        group_a.append(new_shelf)
        build_lvl = build_lvl - 60
    all_shelfs.add(group_a)
    

    那么当你想从all_shelfs中删除整个组时:

    all_shelfs.remove(group_a)
    

    【讨论】:

      【解决方案2】:

      由于您要问的是如何删除逻辑组,而不仅仅是 N 个元素:根据您的程序,将精灵放在多个组中可能会大大简化事情。

      您可以将一个精灵放在多个组中以引用同一个精灵。然后,如果您 kill() 它,会将其从所有组中删除。否则 remove(*groups) 用于删除特定组。

      for i in xrange(100):
          wid = random.randint(120,320)
          pos = [random.randint(0, WIDTH-wid), random.randint(build_lvl-20, build_lvl), wid]
          shelf = Shelf(pos[0],pos[1], pos[2])
          all_shelfs.add(shelf)
          shelfs_a.add(shelf)
          build_lvl = build_lvl - 60
      
      #group B
      for i in xrange(100):
          wid = random.randint(120,320)
          pos = [random.randint(0, WIDTH-wid), random.randint(build_lvl-20, build_lvl), wid]
          shelf = Shelf(pos[0],pos[1], pos[2])
          all_shelfs.add(shelf)
          shelfs_b.add(shelf)
          build_lvl = build_lvl - 60
      
      # ...
      
      # then to erase from both groups
      for shelf in shelfs_a:
          shelf.kill()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-04
        • 2019-03-20
        • 2011-03-06
        • 2022-11-14
        • 2022-01-17
        • 1970-01-01
        • 2015-12-09
        • 2012-09-23
        相关资源
        最近更新 更多