2017-04-09 62 views
1

我有一個問題,即調用變量all_sprites作爲pygame.Group()不返回任何值,我不能解決原因。麻煩繪製到pygame使用組中的屏幕

class game: 

def __init__(self): 
    pg.init() 
    self.screen = pg.display.set_mode((screenwidth, screenheight)) 
    pg.display.set_caption("Gammee") 
    self.clock = pg.time.Clock() 



def run(self): 

    while True: 
     self.dt = self.clock.tick(FPS)/1000 
     self.events() 
     self.update() 
     self.draw() 

def new(self): 
    self.othersprites = pg.sprite.Group() 

def draw(self): 
    self.screen.fill(BGCOLOR) 

    self.othersprites.draw(self.screen) 

    pg.display.flip() 

def quit(self): 
    pg.quit() 
    sys.exit() 

def update(self): 
    self.othersprites.update() 

def events(self): 

    for event in pg.event.get(): 
     if event.type == pg.QUIT: 
      self.quit() 
g = game() 

while True: 
    g.new() 
    g.run() 

這是遊戲

class Player(pg.sprite.Sprite): 

def __init__(self, game, x, y): 

    self.groups = game.all_sprites 
    pg.sprite.Sprite.__init__(self, self.groups) 
    self.game = game 
    self.image = pg.Surface((30, 30), SRCALPHA) 
    self.image.fill(YELLOW) 
    self.rect = self.image.get_rect() 

    self.vx, self.vy = 0, 0 
    self.x = x 
    self.y = y 

def get_keys(self): 
    keys = pg.key.get_pressed() 
    if keys[pg.K_LEFT] or keys[pg.K_a]: 
     self.vx = -PLAYER_SPEED 
    if keys[pg.K_RIGHT] or keys[pg.K_d]: 
     self.vx = PLAYER_SPEED 
    if keys[pg.K_UP] or keys[pg.K_w]: 
     self.vy = -PLAYER_SPEED 
    if keys[pg.K_DOWN] or keys[pg.K_s]: 
     self.vy = PLAYER_SPEED 
    if len(keys) != 0: 
     self.vx *= 0.9 
     self.vy *= 0.9 

def update(self): 
    self.get_keys() 
    self.x += self.vx * self.game.dt 
    self.y += self.vy * self.game.dt 
    self.rect.x = self.x 
    self.rect.y = self.y 

但沒有被吸引到卵石的代碼。我也通過把

for sprite in self.all_sprites: 
    print(sprite) 

其用於輸出信息的精靈測試,但現在什麼都不做,

任何想法,我做錯了嗎?

+3

你也許忘了實例化'Player'?代碼不足以發現錯誤,因此請編輯您的問題並提供[最小,完整且可驗證的示例](http://stackoverflow.com/help/mcve)。 – skrx

+0

感謝您的回覆,我已更新問題以包含完整的遊戲代碼。爲了實例化播放器,假設iit在添加到組中時自動實例化,我必須錯誤嗎? –

回答

0

您必須在game類的new方法中創建Player的實例。此外,精靈組在game類中稱爲othersprites,在Player類中稱爲all_sprites,但名稱必須匹配。

class game: 

    def new(self): 
     self.othersprites = pg.sprite.Group() 
     # This is how you create an instance/object. 
     self.player = Player(self, 200, 300) 


class Player(pg.sprite.Sprite): 

    def __init__(self, game, x, y): 
     self.groups = game.othersprites 

我認爲這將是更好和更簡單的self.player精靈在新的方法添加到self.othersprites而不是將整個game實例的球員。

class game: 

    def new(self): 
     self.othersprites = pg.sprite.Group() 
     self.player = Player(200, 300) 
     self.othersprites.add(self.player) 
+0

順便說一句,類應該有上+名字,例如'class GameCharacter',小寫和下劃線(snake_case)用於函數/方法和變量,例如。 'a_variable_name'。 – skrx