AttributeError: type object ... has no attribute ...
Résolu
Alan.b
Messages postés
1
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Désolé de vous déranger, je suis un peu perdu, car je débute en programmation. Je regarde actuellement une vidéo pour coder un jeu, mais j'ai un problème quelque part. J'ai recopié exactement ce qui est indiqué dans la vidéo tel quel, mais j'ai un problème à la ligne 33 du programme.
import pygame
pygame.init()
# creer une premiere classe pour le joueur
class player(pygame.sprite.Sprite):
# sprite = element graphique pouvant se deplacer etc /joueur monstre
def __init__(self):
super().__init__()
self.health = 100
self.max_health = 100
self.attack = 10
self.velocity = 5
self.image = pygame.image.load('assets/player.png')
self.rect = self.image.get_rect()
# generer la fenetre de jeu
pygame.display.set_caption("meteor game")
screen = pygame.display.set_mode((1080 ,720))
# importer l'arriere plan du jeu
backround = pygame.image.load("assets/bg.jpg")
# charger notre joueur
running = True
#running true = boucle tant que la condition est vraie
while running:
screen.blit(player.image, player.rect)
#appliquer l'arriere plan du jeu
screen.blit(backround, (0, -200))
# appliquer l'image du joueur
screen.blit(player.image, player.rect)
#mettre a jour l'ecran
pygame.display.flip()
# si le joueur ferme cette fenetre
for event in pygame.event.get():
# verifier que l'evenement est fermeture de fenetre
if event.type == pygame.QUIT:
running = False
pygame.quit()
print("fermeture du jeu")
J'ai fait la commande me permettant de faire apparaître mon personnage, mais une fois que je lance le programme, ça me met ce message d'erreur
screen.blit(player.image, player.rect)
^^^^^^^^^^^^
AttributeError: type object 'player' has no attribute 'image'
Si quelqu'un pouvait m'aider rapidement, ça m'aiderait merci beaucoup
PS: c'est la première fois que je poste, désolé pour la qualité
Windows / Edge 126.0.0.0
Windows / Edge 126.0.0.0
1 réponse
Bonjour.
Modifie le nom de la classe player en Player (ajout d'une majuscule).
class Player(pygame.sprite.Sprite):
# sprite = element graphique pouvant se deplacer etc /joueur monstre
def __init__(self):
super().__init__()
self.health = 100
self.max_health = 100
self.attack = 10
self.velocity = 5
self.image = pygame.image.load('assets/player.png')
self.rect = self.image.get_rect()
Puis sous la ligne # charger notre joueur, ajoute :
player = Player()
Bonjour
peut-être expliquer le pourquoi du comment.
Nommer une classe avec une majuscule en premier (Camel Case) fair partie des bonnes pratiques.
Quand à la variable player, comme toute variable en python, tant qu'on ne lui a pas affecté de valeur, python ne sait pas de quel type elle est (en plus de ne pas avoir de valeur).
Et dans ton cas, appeler la classe Player, aurait pu permettre de ne pas la confondre la variable player.