2017-07-31 1066 views
0

我正在阅读关于pygame的代码.Down是pygame的一个小游戏的一部分。我无法理解“clicked_smileys = [s在sprite_list中的s,如果s.rect.collidepoint(pos)]”的代码。它在最后八行。谁能理解? 我认为它刚才有错误,但IDE可以运行它。它是python3的代码。如果s.rect.collidepoint(pos)“的含义是什么,那么在sprite_list中s是什么?

count_smileys = 0 
count_popped = 0 
class Smiley(pygame.sprite.Sprite): 
    pos =(0,0) 
    xvel = 1 
    yvel = 1 
    scale = 100 
    def __init__(self, pos, xvel, yvel): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pic 
     self.scale = random.randrange(10,100) 
     self.image = pygame.transform.scale(self.image, (self.scale,self.scale)) 
     self.rect = self.image.get_rect() 
     self.pos = pos 
     self.rect.x = pos[0] - self.scale/2 
     self.rect.y = pos[1] - self.scale/2 
     self.xvel = xvel 
     self.yvel = yvel 
    def update(self): 
     self.rect.x += self.xvel 
     self.rect.y += self.yvel 
     if self.rect.x <= 0 or self.rect.x > screen.get_width()- self.scale: 
      self.xvel = -self.xvel 
     if self.rect.y <= 0 or self.rect.y > screen.get_height()- self.scale: 
      self.yvel = -self.yvel 
while keep_going: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      keep_going = False 
     if event.type == pygame.MOUSEBUTTONDOWN: 
      if pygame.mouse.get_pressed()[0]:  # Left mouse button, draw 
       mousedown = True 
      elif pygame.mouse.get_pressed()[2]: # Right mouse button, pop 
       pos = pygame.mouse.get_pos() 
       clicked_smileys = [s for s in sprite_list if s.rect.collidepoint(pos)] 
       sprite_list.remove(clicked_smileys) 
     if len(clicked_smileys)> 0: 
      pop.play() 
      count_popped += len(clicked_smileys) 
     if event.type == pygame.MOUSEBUTTONUP: 
       mousedown = False 
    screen.fill(BLACK) 

回答

1

clicked_smileys = [s for s in sprite_list if s.rect.collidepoint(pos)]list comprehension形式的

clicked_smileys = [] 
for s in sprite_list: 
    if s.rect.collidepoint(pos): 
     clicked_smileys.append(s) 
+0

真!Python是太方便了。 – Inteyerry