Problème avec pygame
Thomas
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je programme actuellement un jeu python pour apprendre, et j'ai un problème assez embêtant.
J'ai créer une classe Monster et je lui ai defini une image or cette derniere ne veux pas s'afficher et lors du lancement du programme, l'erreur affiché est :
"AttributeError: 'Monster' object has no attribute 'image' "
Dans mon programme il y à aussi des projectiles qui utilise la même façon d'apparaitre et eux marchent correctement.
J'ai passé 3h à chercher mais rien alors je demande de l'aide ici.
from tkinter import *
import pygame
from subprocess import call
pygame.init()
class game:
def __init__(self):
self.player = player()
self.all_monsters = pygame.sprite.Group()
self.pressed = {}
self.spawn_monster()
def spawn_monster(self):
monster = Monster()
self.all_monsters.add(monster)
class player(pygame.sprite.Sprite):
def __init__(self):
self.health = 100
self.max_health = 100
self.attack = 20
self.all_projectiles = pygame.sprite.Group()
self.image = pygame.image.load("Main.png")
self.rect = self.image.get_rect()
self.rect.x =0
self.rect.y =0
def launch_projectile(self):
self.all_projectiles.add(Projectile(self))
def right(self):
self.rect.x += x_vit
def left(self):
self.rect.x -= x_vit
def up(self):
self.rect.y -= y_vit
def down(self):
self.rect.y += y_vit
def invisible_wall():
if game.player.rect.x>170:
game.player.rect.x = 169
if game.player.rect.x <-30:
game.player.rect.x = -29
if game.player.rect.y<-10:
game.player.rect.y = -9
if game.player.rect.y > 560:
game.player.rect.y = 559
class Projectile(pygame.sprite.Sprite):
def __init__(self, player):
super().__init__()
self.velocity = 15
self.player = player
self.image = pygame.image.load('fireball.png')
self.rect = self.image.get_rect()
self.rect.x = player.rect.x + 135
self.rect.y = player.rect.y + 70
def remove(self):
self.player.all_projectiles.remove(self)
def move(self):
self.rect.x += self.velocity
if self.rect.x > 1080:
self.remove()
class Monster(pygame.sprite.Sprite):
def __init___(self, game):
super().__init__
self.health = 100
self.max_health = 100
self.attack = 5
self.image = pygame.image.load("Monster.png")
self.rect = self.image.get_rect()
self.rect.x = 10
self.rect.y = 10
screen = pygame.display.set_mode((1080,720))
pygame.display.set_caption("Test")
background = pygame.image.load("background.jpg")
game = game()
clock = pygame.time.Clock()
running = True
x_vit=10
y_vit=10
while running:
screen.blit(background, (0, 0))
screen.blit(game.player.image, game.player.rect)
for projectile in game.player.all_projectiles:
projectile.move()
game.player.all_projectiles.draw(screen)
game.all_monsters.draw(screen)
if game.pressed.get(pygame.K_RIGHT):
game.player.right()
if game.pressed.get(pygame.K_LEFT):
game.player.left()
if game.pressed.get(pygame.K_UP):
game.player.up()
if game.pressed.get(pygame.K_DOWN):
game.player.down()
invisible_wall()
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
elif event.type == pygame.KEYDOWN:
game.pressed[event.key] = True
if event.key == pygame.K_SPACE:
game.player.launch_projectile()
elif event.type == pygame.KEYUP:
game.pressed[event.key] = False
Je programme actuellement un jeu python pour apprendre, et j'ai un problème assez embêtant.
J'ai créer une classe Monster et je lui ai defini une image or cette derniere ne veux pas s'afficher et lors du lancement du programme, l'erreur affiché est :
"AttributeError: 'Monster' object has no attribute 'image' "
Dans mon programme il y à aussi des projectiles qui utilise la même façon d'apparaitre et eux marchent correctement.
J'ai passé 3h à chercher mais rien alors je demande de l'aide ici.
from tkinter import *
import pygame
from subprocess import call
pygame.init()
class game:
def __init__(self):
self.player = player()
self.all_monsters = pygame.sprite.Group()
self.pressed = {}
self.spawn_monster()
def spawn_monster(self):
monster = Monster()
self.all_monsters.add(monster)
class player(pygame.sprite.Sprite):
def __init__(self):
self.health = 100
self.max_health = 100
self.attack = 20
self.all_projectiles = pygame.sprite.Group()
self.image = pygame.image.load("Main.png")
self.rect = self.image.get_rect()
self.rect.x =0
self.rect.y =0
def launch_projectile(self):
self.all_projectiles.add(Projectile(self))
def right(self):
self.rect.x += x_vit
def left(self):
self.rect.x -= x_vit
def up(self):
self.rect.y -= y_vit
def down(self):
self.rect.y += y_vit
def invisible_wall():
if game.player.rect.x>170:
game.player.rect.x = 169
if game.player.rect.x <-30:
game.player.rect.x = -29
if game.player.rect.y<-10:
game.player.rect.y = -9
if game.player.rect.y > 560:
game.player.rect.y = 559
class Projectile(pygame.sprite.Sprite):
def __init__(self, player):
super().__init__()
self.velocity = 15
self.player = player
self.image = pygame.image.load('fireball.png')
self.rect = self.image.get_rect()
self.rect.x = player.rect.x + 135
self.rect.y = player.rect.y + 70
def remove(self):
self.player.all_projectiles.remove(self)
def move(self):
self.rect.x += self.velocity
if self.rect.x > 1080:
self.remove()
class Monster(pygame.sprite.Sprite):
def __init___(self, game):
super().__init__
self.health = 100
self.max_health = 100
self.attack = 5
self.image = pygame.image.load("Monster.png")
self.rect = self.image.get_rect()
self.rect.x = 10
self.rect.y = 10
screen = pygame.display.set_mode((1080,720))
pygame.display.set_caption("Test")
background = pygame.image.load("background.jpg")
game = game()
clock = pygame.time.Clock()
running = True
x_vit=10
y_vit=10
while running:
screen.blit(background, (0, 0))
screen.blit(game.player.image, game.player.rect)
for projectile in game.player.all_projectiles:
projectile.move()
game.player.all_projectiles.draw(screen)
game.all_monsters.draw(screen)
if game.pressed.get(pygame.K_RIGHT):
game.player.right()
if game.pressed.get(pygame.K_LEFT):
game.player.left()
if game.pressed.get(pygame.K_UP):
game.player.up()
if game.pressed.get(pygame.K_DOWN):
game.player.down()
invisible_wall()
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
elif event.type == pygame.KEYDOWN:
game.pressed[event.key] = True
if event.key == pygame.K_SPACE:
game.player.launch_projectile()
elif event.type == pygame.KEYUP:
game.pressed[event.key] = False
A voir également:
- Problème avec pygame
- Pygame ou tkinter ? - Forum Python
- Modulenotfounderror: no module named 'pygame' ✓ - Forum Python
- Pygame importer une police d'écriture ✓ - Forum Python
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, avant tout, utilise les balises de code pour nous montrer ton code:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
quand tu as le message d'erreur, n'as-tu pas aussi des information à propos des lignes affectées?
comment détermines-tu que les projectiles fonctionnent correctement?
il y a un caractère en trop dans la ligne
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
quand tu as le message d'erreur, n'as-tu pas aussi des information à propos des lignes affectées?
comment détermines-tu que les projectiles fonctionnent correctement?
il y a un caractère en trop dans la ligne
def __init___(self, game):
J'ai refait un code plus simplifier comprenant simplement les éléments pour monster et le problème est le mémé.
AttributeError: 'Monster' object has no attribute 'image'
Et cela viens de la ligne 40 au niveau du .draw.
AttributeError: 'Monster' object has no attribute 'image'
Et cela viens de la ligne 40 au niveau du .draw.
import pygame pygame.init() class game: def __init__(self): self.all_monsters = pygame.sprite.Group() self.pressed = {} self.spawn_monster() def spawn_monster(self): monster = Monster() self.all_monsters.add(monster) class Monster(pygame.sprite.Sprite): def __init___(self): self.health = 100 self.max_health = 100 self.attack = 5 self.image = pygame.image.load("Monster.png") self.rect = self.image.get_rect() self.rect.x = 10 self.rect.y = 10 screen = pygame.display.set_mode((1080,720)) pygame.display.set_caption("Test") background = pygame.image.load("background.jpg") game = game() clock = pygame.time.Clock() running = True while running: screen.blit(background, (0, 0)) game.all_monsters.draw(screen) pygame.display.flip() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit()
Je suis désolé pour les balises c'est la première fois que je demande de l'aide sur ce forum je ne savais pas, souhaites-tu que je renvoie le code avec ces balises?
Et par rapport au message d'erreur il affiche "draw" qui provient de la ligne 125" "
Et pour les projectiles ils marchent car avant de créer les monstres j'ai crée les projectiles qui fonctionner parfaitement.
Et merci pour le caractère je retire ça.