Как мне создать спрайты в Pygame? Мне тоже нужно? - PullRequest
0 голосов
/ 29 апреля 2018

Итак, я работаю над игрой для некоторой курсовой работы в моем компьютерном курсе, я почти закончил, но за свою жизнь я не могу получить несколько спрайтов Spider, чтобы они появлялись в правильных местах или сбрасывались должным образом между уровнями. Я пытался добавить разные экземпляры в группы раньше, но я всегда получаю разные ошибки с каждым методом, который я пробую. код ниже и я довольно новичок в Pygame, так что извините за грязный код ..

#
class Spider(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load( 'Assets/Level-Assets/Level 1/Enemies/Spider_Down.png')
        self.rect = self.image.get_rect()
        self.Health = 3
        self.Spawned = False
        self.range = 100
        self.Gravity= 6
        self.pos_difference = 0
        self.Active = False
        self.Fall = False
        self.Spiders = []

##################################################################################################################
    def Set_Position(self):
        if self.Spawned == False:
            self.rect.center = (World.mapx, World.mapy)
            Enemies.add(self)
            self.Spawned = True

        else:
            self.rect.center = self.rect.center


######################################################################################################################

    def update(self):


        self.pos_difference = Player.rect.centery - self.rect.centery
        if Player.rect.centerx >= self.rect.centerx -4 or Player.rect.centerx >= self.rect.centerx + 4:
            if Player.rect.centery > self.rect.centery:
                if self.pos_difference < 200:
                    self.Active = True
                    self.Fall = True

        if self.Active == True:
            if self.Fall == True:
                self.rect.centery += self.Gravity

Это код для 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()

1 Ответ

0 голосов
/ 29 апреля 2018

Я нашел вашу проблему: вы перезаписываете свой класс Spider его экземпляром (Spider()), а затем даете ему то же имя. Таким образом, вы последовательно добавляете одного и того же паука в список своих врагов. Вместо этого вы должны удалить это определение в нижней части вашего файла, и где бы вы ни добавляли (несколько) пауков, вы должны создавать этот экземпляр.

В более общем замечании считается плохим стилем (и не слишком хорошим для производительности) использовать глобальные переменные так же широко, как и вы. Было бы намного лучше передать их между функциями и классами. Кроме того, заглавная буква CamelCase, которую вы используете для всех своих переменных, обычно используется только для классов. Я бы порекомендовал проверить pep8 , чтобы узнать больше об использовании общих стилей Python. Это облегчает обнаружение подобных проблем, снижает вероятность их возникновения и упрощает чтение для всех, кто в этом участвует. Правильное использование этих очков может даже значительно улучшить вашу оценку;).

...