簡體   English   中英

我如何在Pygame中實例精靈? 我也需要嗎?

[英]How do i instance sprites in Pygame? Do i need too?

因此,我正在為自己的計算機課程中的某些課程工作而開發游戲,我幾乎完成了,但是為了我的生命,我無法在正確的位置生成多個蜘蛛精靈,也無法在關卡之間正確重置。 我嘗試過將不同的實例添加到組中,但是我嘗試的每種方法總是會收到不同的錯誤。 該代碼在下面,對pygame來說還是很新的內容,對不起代碼混亂。

    def DisplayWorld(self):        
        self.MapLoad = False
        for Row in range(len(self.newMap)):
            for Col in range(len(self.newMap[Row])):
                self.mapx = Col * 64 
                self.mapy = ((Row + self.Height_modifier) * 64)
                self.tile_pos = (self.mapx, self.mapy )


                if int(self.newMap[Row][Col]) == 1:
                    self.rect = self.Brick_Center.get_rect(left = (self.mapx) , bottom = (self.mapy))
                    self.World_sprites.add(World)
                    self.Camera_Pos_Check()
                    Player.Collision_Check()
                    Spider.Collision_Check()
                    Shoot.Collision_Check()
                    self.World_sprites.draw(screen)


                elif int(self.newMap[Row][Col]) == 2:
                    Enemies.add(Spider(screen))




def main():
    play = True
    while play:
        if pygame.key.get_pressed()[pygame.K_ESCAPE]:
            play = False
        if not Sprites.sprites():
            Sprites.add(Player,Spider)
            print(Sprites)
        clock.tick(CLOCKRATE)
        pygame.mouse.set_visible(False)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                play = False



        screen.blit(bgi,(0,0))
        screen.blit(bgi,(0,500))
        World.findLevel()
        Sprites.update()
        Enemies.draw(screen)
        Sprites.draw(screen)
        if Shoot.bullet == True:
            Shoot.update()
            for b in range(len(Shoot.bullets)):
                screen.blit(Shoot.image, (Shoot.bullets[b][0],Shoot.bullets[b][1]))

        UI.Health_Display()
        pygame.display.flip()


Sprites = pygame.sprite.Group()
Enemies = pygame.sprite.Group()
UI = User_Interface()
World = World()
Player = Proto()
Shoot = Shoot()
Portal = Portals()
Spider = Spider()



main()

這是Spider的代碼,在World類中被調用之前,它實際上並沒有做任何事情,這是我認為大部分問題所在。

  def DisplayWorld(self): self.MapLoad = False for Row in range(len(self.newMap)): for Col in range(len(self.newMap[Row])): self.mapx = Col * 64 self.mapy = ((Row + self.Height_modifier) * 64) self.tile_pos = (self.mapx, self.mapy ) if int(self.newMap[Row][Col]) == 1: self.rect = self.Brick_Center.get_rect(left = (self.mapx) , bottom = (self.mapy)) self.World_sprites.add(World) self.Camera_Pos_Check() Player.Collision_Check() Spider.Collision_Check() Shoot.Collision_Check() self.World_sprites.draw(screen) elif int(self.newMap[Row][Col]) == 2: Enemies.add(Spider(screen)) def main(): play = True while play: if pygame.key.get_pressed()[pygame.K_ESCAPE]: play = False if not Sprites.sprites(): Sprites.add(Player,Spider) print(Sprites) clock.tick(CLOCKRATE) pygame.mouse.set_visible(False) for event in pygame.event.get(): if event.type == pygame.QUIT: play = False screen.blit(bgi,(0,0)) screen.blit(bgi,(0,500)) World.findLevel() Sprites.update() Enemies.draw(screen) Sprites.draw(screen) if Shoot.bullet == True: Shoot.update() for b in range(len(Shoot.bullets)): screen.blit(Shoot.image, (Shoot.bullets[b][0],Shoot.bullets[b][1])) UI.Health_Display() pygame.display.flip() Sprites = pygame.sprite.Group() Enemies = pygame.sprite.Group() UI = User_Interface() World = World() Player = Proto() Shoot = Shoot() Portal = Portals() Spider = Spider() main() 

我發現了您的問題:您用它的一個實例( Spider() )覆蓋了Spider類,然后為其賦予了相同的名稱。 因此,您一直在向敵人列表中添加同一只蜘蛛。 相反,您應該在文件底部刪除此定義,並在要添加(多個)蜘蛛的任何地方創建此實例。

籠統地說,像您一樣廣泛使用全局變量被認為是不好的風格(並且對性能不太好)。 最好在函數和類之間傳遞它們。 同樣,用於所有變量的CamelCase大寫字母通常僅用於類。 我建議檢查pep8,以了解有關如何使用常見Python樣式的更多信息。 它使這類問題更容易發現,更不可能發生,並且簡化了涉及人員的閱讀。 正確地使用這些點甚至可以顯着提高您的成績;)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM