微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在一个班级中绘制多个精灵

如何解决如何在一个班级中绘制多个精灵

我正在制作一个以行星为背景的太空射击游戏。我决定在背景中画一些行星,当我向右移动时,行星应该向左移动。那是为了让玩家感觉到飞船在空间中移动。然而,我本可以只为一颗行星做到这一点。当尝试将其他行星应用到一个类中时,它会不断变化到另一个行星。

lanetdic = {'planets':[]}
imagestoload = ['Feza/graphs/sprites/saturne.png']
for i in imagestoload:
    img = pg.image.load(i).convert_alpha()
    planetdic['planets'].append(img)

这是加载精灵。在下面,我为行星创建了一个类。

class Planets(pg.sprite.Group):
    def __init__(self):
        pg.sprite.Group.__init__(self)
        self.frame = 0
        self.image = planetdic['planets'][self.frame]
        self.rect = self.image.get_rect()
        self.rect.center = (500+100*self.frame,HEIGHT/2)
        self.pos = vec(500,HEIGHT/2)
        self.vel = vec(0,0)
        self.acc = vec(0,0)
    def update(self):
        #self.acc = vec(0,0)
        self.frame = (self.frame + 1)%len(planetdic['planets'])

也许为一个星球创建一个类是不明智的,但如果有请告诉我,我找不到其他方法

如果我们再次切入正题。在下面我做了一个 for 循环来加载图像。并再次使用相同的 for 循环

planetdic = {'planets':[]}
    imagestoload = ['Feza/graphs/sprites/saturne.png','Feza/graphs/sprites/jupiter.png','Feza/graphs/sprites/venus.png','Feza/graphs/sprites/uranus.png','Feza/graphs/sprites/neptune.png']
    for i in imagestoload:
        img = pg.image.load(i).convert_alpha()
        planetdic['planets'].append(img)

当我应用多个图像时,它会在几毫秒内将一个图像更改为另一个图像,我该如何防止这种情况发生。我只想在背景中显示每个行星并让它们移动。

解决方法

如何在一个类中绘制多个精灵

你不这样做。但是,您可以为一个类创建多个 instance objects

图像 (Surface) 必须是类 Planet 的构造函数的参数。 Planet 类是 sprite.Sprite 的子类,而不是 sprite.Group

class Planet(pg.sprite.Sprite):
    def __init__(self,image):
        pg.sprite.Group.__init__(self)
        self.frame = 0
        self.image = image
        self.rect = self.image.get_rect()
        self.rect.center = (500+100*self.frame,HEIGHT/2)
        self.pos = vec(500,HEIGHT/2)
        self.vel = vec(0,0)
        self.acc = vec(0,0)

为每个行星创建一个 Planet 类的新实例对象:

planets = pg.sprite.Group()
imagestoload = ['Feza/graphs/sprites/saturne.png','Feza/graphs/sprites/jupiter.png','Feza/graphs/sprites/venus.png','Feza/graphs/sprites/uranus.png','Feza/graphs/sprites/neptune.png']
for filepath in imagestoload:
    img = pg.image.load(filepath).convert_alpha()
    planet = Planet(img)
    planets.add(planet)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。