【问题标题】:How can I just draw a specific sprite in a Group with pygame draw()?如何使用 pygame draw() 在组中绘制特定的精灵?
【发布时间】:2014-03-12 18:56:30
【问题描述】:
<Group(4 sprites)>

我有 4 个精灵在一组,他们都准备好用线画了,

stuff_to_draw.draw(screen)

他们目前都在同一时间画画。

有没有可能做这样的事情

stuff_to_draw[0].draw(screen)

我查看了documentation for pygame Groups,但找不到任何有关在组中选择特定元素的有用信息。

我想达到什么目的?

sprite 组当前包含一个答案 sprite,它由位置 (x,y) 和要 blit 的字母的图像组成。

目前,在所有地图中,答案都是 blitted 而不是当前问题。所以我想先说问题一stuff_to_draw[0],然后问题二stuff_to_draw[1]

【问题讨论】:

    标签: python pygame draw


    【解决方案1】:

    首先,为您的每个精灵添加一个self.type。给它一个值,例如self.type = 1。然后当你想绘制某个精灵或一组精灵时调用它:

    for sprite in group: #Replace group with your sprite group
        if sprite.type == 1: #Or whatever type you want
            sprite.draw(screen)
        elif sprite.type == 2:
            sprite.draw(screen)
        #Etc...
    

    接下来,在您的 sprite 类中,确保您继承自 pygame.sprite.Sprite

    class my_sprite_class(pygame.sprite.Sprite):
        def __init__(self):
            pygame.sprite.Sprite.__init__()
            #Etc...
    
        #Add this draw function so we can draw individual sprites
        def draw(self, screen):
            screen.blit(self.image, self.rect)
    

    我忘记了单个精灵没有绘制功能,只有组。 @pmoleri @jackdh 我的错

    请在此处阅读此post,以了解该课程可以做什么。

    如果您还有其他问题,请在下方评论。

    【讨论】:

    • Sprite.draw() 不存在。
    • 是的,如果您使用的是pygame.sprite.Sprite。您通常将pygame.sprite.Sprite 与pygame 的精灵组一起使用。请不要对答案投反对票,因为它不是你的。谢谢你:)
    • 嗨,我试过了,我正确地传递了它,如 gist.github.com/jackdh/58732728834f2b8f7338 所示,尽管我收到了错误。 gist.github.com/jackdh/a398887c329ec7fb9aaa 知道为什么吗?
    • @Remolten 它没有:pygame.sprite.Sprite().draw(None) 给出:'Sprite' object has no attribute 'draw'。而你因为这不是我的答案而对我投反对票的假设,真的很不真实。
    • 请阅读我上面新编辑的帖子。它应该工作。 @pmoleri 无意冒犯兄弟 :)
    【解决方案2】:

    您可以对任何单独的精灵进行 blit,但我不建议这样做。应该是这样的:

    sprite = stuff_to_draw.sprites()[0]
    screen.blit(sprite.image, sprite.rect)
    

    我的建议是把你想画的东西放在 Sprites Group 里,把剩下的放在一个单独的列表或组里。

    【讨论】:

    • 为什么不推荐呢?您介意向我展示出于教育目的我将如何做吗?
    • 因为 Sprites Groups 用于绘制其所有元素,而一些高级组(例如:RenderUpdates)甚至可以跟踪每个更新的区域以在屏幕更新中进行优化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多