2010-09-16 31 views
3

我有一個函數可以加載一個精靈表,找到一個精靈塊,然後將每個精靈放入一個列表中。在將精靈添加到列表中之前,它會將其粘貼到屏幕上。加載完精靈之後,它會遍歷整個列表,在每個精靈完成之後進行blitting。這兩組blits 應該是是相同的,但相反,第一個精靈將從列表中刪除,並且最後一個精靈將被複制。兩組位塊傳輸的是這樣的:pygame精靈列表失去了它的第一個元素,並獲得了最後一個副本

alt text

每個精靈是圖混合在它被添加到列表中的順序,從左到右,從上到下去,所以第一個精靈是左上角一個,最後一個是右下角。

下面是加載精靈功能:

def assembleSprites(name, screen): 
    """Given a character name, this function will return a list of all that 
    character's sprites. This is used to populate the global variable spriteSets""" 
    spriteSize = (35, 35) 
    spritesheet = pygame.image.load("./images/patchconsprites.png") 
    sprites = [] 
    start = charCoords[name] 
    char = list(start) 
    image = pygame.Surface((35,35)) 

    # load each sprite and blit them as they're added to the list 
    for y in range(5): 
     char[0] = start[0] 
     for x in range(9): 
      rect = (char[0], char[1], char[0]+spriteSize[0], char[1]+spriteSize[1]) 
      image.blit(spritesheet, (0,0), rect) 
      image = image.convert() 
      colorkey = image.get_at((0,0)) 
      image.set_colorkey(colorkey, RLEACCEL) 
      screen.blit(image, (x*40, y*40)) 
      pygame.display.update() 
      sprites.append(image) 
      char[0] += spriteSize[0]+2 
     char[1] += spriteSize[1]+2 

    # check that the list was constructed correctly 
    count = 0 
    for y in range(6,11): 
     for x in range(9): 
      screen.blit(sprites[count], (x*40,y*40)) 
      count += 1 
    pygame.display.update() 
    return sprites 

任何人看到我是如何擰名單嗎?

+0

嘗試在第二組的每個blit後更新顯示。看看「sprites」裏面究竟是什麼。 – SilentGhost 2010-09-16 18:56:46

+0

@SilentGhost:它們的顯示方式與在圖片中的顯示方式相同,只是一次一個。 – Max 2010-09-16 19:02:21

+0

獨立代碼(+鏈接到源png文件)可能會得心應手。 – tokland 2010-09-16 19:16:19

回答

7
image.blit(spritesheet, (0,0), rect) 

您還沒有圍繞循環每次重新初始化image,它仍然是你在前面的迭代中使用相同的表面,表面已在列表中。每循環一次,您都會覆蓋您在前一步中添加到列表中的精靈。

我建議在行之前而不是在循環開始之前抓住新的image= pygame.Surface((35,35))

+0

就是這樣。謝謝你的幫助。 – Max 2010-09-16 19:27:02

相關問題