2012-12-16 20 views
-1

具體而言,我希望sg_fireball中的每個精靈都能「反彈」,而不會給Spell()中的每個精靈帶來「反彈」。有沒有一種乾淨的方式來做到這一點,而不是使「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) 

回答

1

如果我理解正確的話,你希望一些精靈有一定的屬性,而另一些則不會。這是多態性和繼承的完美例子。 這是您可以執行的選項之一:

  1. 您將正常咒語作爲彈性咒語的子類。然後你可以有另一個更新功能,你會照顧彈跳。您通常可以在與NormalSpell相同的精靈組中添加BouncySpell。
+0

這導致我在正確的方向,謝謝。最終生成一個派生自Spell的類並調用該子類,使用組中定義的屬性而不是參數。 – nivekuil