python - 一个 pygame Sprite 列表丢失了它的第一个元素,并获得了最后一个元素的副本

标签 python list pygame

我有一个函数可以加载一个 sprite 表,找到一个 sprite block ,然后将每个单独的 sprite 放入一个列表中。在将 sprite 添加到列表中之前,它会将其 blit 到屏幕上。一旦完成加载 Sprite ,它就会遍历列表,在每个 Sprite 运行时进行 blit。两组 blits 应该相同,但第一个 Sprite 从列表中删除,最后一个 Sprite 被复制。两组 blit 看起来像这样:

alt text

每个 sprite 都按照它添加到列表中的顺序进行 blit,从左到右,从上到下,所以第一个 sprite 在左上角,最后一个在右下角。

这是加载 Sprite 的函数:

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

有人看到我是如何搞砸列表的吗?

最佳答案

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

你没有在每次循环中重新初始化 image,它仍然是你在上一次迭代中使用的相同表面,一个已经在列表中的表面。每次循环都会覆盖您在上一步中附加到列表中的 Sprite 。

我建议在该行之前而不是在循环开始之前抓取一个新的 image= pygame.Surface((35,35))

关于python - 一个 pygame Sprite 列表丢失了它的第一个元素,并获得了最后一个元素的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3729648/

相关文章:

c# - 在 (c#) 库中使用 List<T> 与 LinkedList<T> 的性能差异是什么

python - 如何以列表的形式获取 pandas MultiIndex 的值?

python - 基本 Pygame 程序未执行

python - Pygame 没有在窗口中显示任何内容

python - 如何让颜色显示到我正在制作的游戏中?

python - 来自函数的 Tensorflow 占位符

python - 根据第二个参数对元组进行排序

python - 在Django中上传文件名

python - 如何克服 - 在 Windows 上 pip install ansible 失败,文件名或扩展名在 Windows 上太长

list - Prolog:具有元素总和 S 的 k 个元素的排列