-1

具体的には、Spell() からすべてのスプライトに「バウンス」を与えるのではなく、sg_fireball の各スプライトに「バウンス」を持たせたいと考えています。「バウンス」を Spell() の引数にしたり、sg_fireball をループしたりせずにこれを行うきれいな方法はありますか?

関連するコード スニペット:

self.sg_fireball = pygame.sprite.Group()
self.sg_fireball.speed = 6.0
self.sg_fireball.image = pygame.image.load("fireball.png")
self.sg_fireball.bounces = 1

if event.type == pygame.MOUSEBUTTONDOWN:
    self.character.cast(self.sg_fireball)

def cast(self, sg):
    sg.add(Spell(self.rect.center, sg.speed, self.dir, sg.image))

class Spell(pygame.sprite.Sprite):
    def __init__(self,pos, speed, direction, img, bounces):
        pygame.sprite.Sprite.__init__(self)
        self.bounces = bounces
        self.image = img
        self.rect = pygame.Rect(pos, (8,8))
        self.posx = self.rect.x
        self.posy = self.rect.y
        self.speed = speed
        self.dir = direction
        self.velx = self.speed*math.cos(self.dir)
        self.vely = self.speed*math.sin(self.dir)
4

1 に答える 1

1

私の理解が正しければ、いくつかのスプライトに特定の属性を持たせたいと思っているのに、そうでないスプライトもあるということです。これは、ポリモーフィズムと継承の完璧な例です。これは、実行できるオプションの 1 つです。

  1. 通常の呪文を弾む呪文としてサブクラス化します。その後、バウンスを処理する別の更新機能を使用できます。通常、NormalSpell と同じスプライト グループに BouncySpell を追加できます。
于 2012-12-16T11:16:44.853 に答える