Partage
  • Partager sur Facebook
  • Partager sur Twitter

pygame error sprite

Sujet résolu
    24 décembre 2021 à 12:29:12

    bonjour je me présente je m'appelle Arthur et j'ai un problème avec  mon code  voici l'erreur

    Traceback (most recent call last):

      File "C:\Users\droop\PycharmProjects\Game v 1.0\main.py", line 36, in <module>

        game.player.all_projectiles.draw(screen)

      File "C:\Users\droop\PycharmProjects\Game v 1.0\venv\lib\site-packages\pygame\sprite.py", line 546, in draw

        surface.blits((spr.image, spr.rect) for spr in sprites)

      File "C:\Users\droop\PycharmProjects\Game v 1.0\venv\lib\site-packages\pygame\sprite.py", line 546, in <genexpr>

        surface.blits((spr.image, spr.rect) for spr in sprites)

    AttributeError: 'Projectile' object has no attribute 'image'

    je vous mets les codes  merci d'avance 

    game.py

    import pygame
    from player import Player
    # cree une seconde classe qui va representer notre jeux
    class Game:
    
        def __init__(self):
            # generer notre joueur
            self.player = Player()
            self.pressed = {}



    main.py 


    import pygame
    from game import Game
    from player import Player
    from projectile import Projectile
    pygame.init()
    
    #generer le fenettre du jeux
    
    pygame.display.set_caption("the Survival")
    screen = pygame.display.set_mode((1920, 1000))
    
    # importer de charger l'arriere plan
    
    background = pygame.image.load("assets/bg.jpg")
    
    # charger notre jeux
    game = Game()
    
    # charger notre joueur
    
    player = Player()
    
    running = True
    
    #Boucle tant que que cette ccondition est vrai
    
    while running:
    
        # appliquer l'arriere plan de notre jeu
        screen.blit(background, (0, 0))
    
        # appliquer l immage de mon joueur
        screen.blit(game.player.image, game.player.rect)
    
        # appliquer l'ensemble des images de mon groupe de projectile
        game.player.all_projectiles.draw(screen)
    
        # verifier si le joueur souhaite aller a gauche ou a droite
        if game.pressed.get(pygame.K_RIGHT):
            game.player.move_right()
        elif game.pressed.get(pygame.K_LEFT) and game.player.rect.x > 0:
            game.player.move_left()
    
    
    
        # mettre a jour l'écran
        pygame.display.flip()
    
        #si le joueur ferme cette fenetre
        for event in pygame.event.get():
            #que l'evenement est fermeture de fenetre
            if event.type == pygame.QUIT:
                running = False
                pygame.quit()
                print("fermeture du jeux")
                # detecter  si un joueur lache une touche du clavier
            elif event.type == pygame.KEYDOWN:
                game.pressed[event.key] = True
    
                # detecter si le touche espace est enclencher pour lancer projectile
    
                if event.key == pygame.K_SPACE:
                    game.player.launch_projectile()
            elif event.type == pygame.KEYUP:
                game.pressed[event.key] = False
    
    



    player.py



    import pygame
    from projectile import Projectile
    
    
    class Player(pygame.sprite.Sprite):
    
        def __init__(self):
            super().__init__()
            self.health = 100
            self.max_health = 100
            self.attack = 10
            self.velocity = 5
            self.all_projectiles = pygame.sprite.Group()
            self.image = pygame.image.load('assets\player.png')
            self.rect = self.image.get_rect()
            self.rect.x = 850
            self.rect.y = 700
    
        def launch_projectile(self):
            # cree une nouvelle instance de la classe projectile
    
            self.all_projectiles.add(Projectile())
    
    
        def move_right(self):
            self.rect.x += self.velocity
    
        def move_left(self):
            self.rect.x -= self.velocity



    et pour finir projectile.py


    import pygame
    
    
    # definir la classe qui va generer le projectile de notre joueur
    class Projectile(pygame.sprite.Sprite):
    
        #def le constructeur de cette classe
        def __int__(self):
            super().__init__()
            self.velocity = 5
            self.image = pygame.image.load('assets\projectile.png')
            self.image = pygame.transform.scale(self.image, (50, 50))
            self.rect = self.image.get_rect()




    -
    Edité par ArtureValence 24 décembre 2021 à 15:12:01

    • Partager sur Facebook
    • Partager sur Twitter
      24 décembre 2021 à 12:49:58

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Pour modifier votre titre, éditez le premier message de votre sujet.

      (titre originel : problème python)

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        24 décembre 2021 à 13:01:46

        dans la classe Projectile, ton __init__ s'appelle par erreur __int__, donc l'initialisation de tes instances de projectiles ne se font pas.
        • Partager sur Facebook
        • Partager sur Twitter
          24 décembre 2021 à 13:41:51

          @ArtureValence Bonjour, merci de modifier le titre de votre sujet en fonction de votre problématique comme demandé.

          La modération

          • Partager sur Facebook
          • Partager sur Twitter
            24 décembre 2021 à 16:45:48

            Pour ton autre erreur (dans ton message fermé pour doublon (ce n'en était pas un mais bon) que tu aurais pu mettre ici, vu que c'est sur le même code)

            c'est parce que tu ne créés pas d'instance de Monster, tu as oublié les parenthèses ligne 16

            import pygame.sprite
            from monster import Monster
            from player import Player
             
            class Game:
             
                def __init__(self):
                    # def si notre jeux a commencer ou non
                    self.is_playing = False
                    self.player = Player()
                    self.all_monster = pygame.sprite.Group
                    self.pressed = {}
                    self.spawn_monster()
             
                def spawn_monster(self):
                    monster = Monster()
                    self.all_monster.add(monster)
             
                def update(self):
                    # mettre a jour l'écran
                    pygame.display.flip()
             
                    # si le joueur ferme cette fenetre
                    for event in pygame.event.get():
                        # que l'evenement est fermeture de fenetre
                        if event.type == pygame.QUIT:
                            running = False
                            pygame.quit()
                            print("fermeture du jeux")
                            # detecter  si un joueur lache une touche du clavier
                        elif event.type == pygame.KEYDOWN:
                            self.pressed[event.key] = True
             
                            # detecter si le touche espace est enclencher pour lancer projectile
             
                            if event.key == pygame.K_SPACE:
                                self.player.launch_projectile()
                        elif event.type == pygame.KEYUP:
                            self.pressed[event.key] = False



            -
            Edité par umfred 24 décembre 2021 à 16:45:58

            • Partager sur Facebook
            • Partager sur Twitter

            pygame error sprite

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown