список пигментных спрайтов теряет свой первый элемент и получает дубликат последнего - PullRequest
3 голосов
/ 16 сентября 2010

У меня есть функция, которая загружает лист спрайтов, находит блок спрайтов и затем помещает каждый отдельный спрайт в список.Прежде чем добавить спрайт в список, он переместит его на экран.Как только он закончит загрузку спрайтов, он будет перебирать список, стирая каждый спрайт по ходу.Два набора блитов должны быть идентичными, но вместо этого первый спрайт удаляется из списка, а последний спрайт дублируется.Два набора блитов выглядят следующим образом:

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

Кто-нибудь видел, как я испорчу список?

1 Ответ

7 голосов
/ 16 сентября 2010
image.blit(spritesheet, (0,0), rect)

Вы не переинициализировали image каждый раз вокруг цикла, это все та же поверхность, которую вы использовали в предыдущей итерации, поверхность, которая уже есть в списке.Каждый раз в цикле вы перезаписываете спрайт, добавленный в список на предыдущем шаге.

Я предлагаю захватить новый image= pygame.Surface((35,35)) непосредственно перед строкой, а не перед началом цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...