【问题标题】:Created multiple instances of the same image using a loop, can I move each instance of the image independently?使用循环创建同一图像的多个实例,我可以独立移动图像的每个实例吗?
【发布时间】:2019-06-02 12:34:36
【问题描述】:

我在 pygame 中有一个图像,该图像在 for 循环中调用了多个图像实例。有没有一种方法可以独立移动图像的每个实例,而无需按原样使用代码移动其他实例?还是我必须单独加载图像的单独实例?

def pawn(self): 
    y_pos = 100
    self.image = pygame.transform.scale(pygame.image.load('pawn.png'), (100,100))
    for x_pos in range(0,8,1):
        pieceNum = x_pos
        screen.blit(self.image, (x_pos*100, y_pos))

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    我建议使用pygame.sprite.Spritepygame.sprite.Group

    创建一个派生自pygame.sprite.Sprite的类:

    class MySprite(pygame.sprite.Sprite):
    
        def __init__(self, image, pos_x, pos_y):
            super().__init__() 
            self.image = image
            self.rect = self.image.get_rect()
            self.rect.topleft = (pos_x, pos_y)
    

    加载图片

    image = pygame.transform.scale(pygame.image.load('pawn.png'), (100,100))
    

    创建一个精灵列表

    imageList = [MySprite(image, x_pos*100, 100) for x_pos in range(0,8,1)]
    

    并创建一个精灵组:

    group = pygame.sprite.Group(imageList)
    

    组的精灵可以由.draw绘制(screenpygame.display.set_mode()创建的表面):

    group.draw(screen)
    

    精灵的位置可以通过改变.rect属性的位置来改变(见pygame.Rect)。

    例如

    imageList[0].rect = imageList[0].rect.move(move_x, move_y)
    

    当然,移动可以在MySprite类的方法中完成:

    例如

    class MySprite(pygame.sprite.Sprite):
    
        # [...]
    
        def move(self, move_x, move_y):
            self.rect = self.rect.move(move_x, move_y)
    
    imageList[1].move(0, 100)
    

    【讨论】:

    • 谢谢大家,真的很好解释!非常感激。 :)
    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多