1 pièce(s) jointe(s)
Collision Pygame CollideRect
Bonjour à tous, je suis entrain de créer un platefromer en pygame ou 2 personnages : mario et luigi s'affrontent sur une map, le but est d'attaquer l'adversaire pour qu'il perdre un point et si il perd ses 3 points il a perdu, quand on clique sur une touche (espace pour mario et enter pour luigi), un projectile part, le problème est que j'ai mis comme condition : si il n'y a pas de collision entre le projectile et un perso (mario ou luigi) : le déplacement du projectile continue sinon (cela veut dire quand il y a collision ) : le perso en contacte perd un point de vie, sauf que j'ai un message d'erreur car mon système de collision est mal géré, j'ai cherché sur internet sur d'autres forum mais j'ai pas trouvé le réponse, pouvez vous m'aider svp merci beaucoup je voit affiche des screens ci contre :
Pièce jointe 583981
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| import pygame
class Projectile(pygame.sprite.Sprite) :
def __init__(self, game, direction ,qui) :
self.image = pygame.image.load("assets/projectile.png")
self.image = pygame.transform.scale(self.image, (20, 20))
self.rect = self.image.get_rect()
self.game = game
self.player_actuel = qui
self.direction = direction
self.vitesse = 12
if qui == "mario" :
self.rect.x = self.game.player1.rect.x
self.rect.y = self.game.player1.rect.y
elif qui == "luigi" :
self.rect.x = self.game.player2.rect.x
self.rect.y = self.game.player2.rect.y
def remove(self) :
self.game.all_projectile.remove(self) #Détruire le projectile courant
def move(self) :
if self.player_actuel == "mario" :
if self.direction == "droite" :
if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :
if self.rect.x <= 1600 :
self.rect.x = self.rect.x + self.vitesse
else :
self.remove()
print("Suppression !")
else :
self.remove()
self.game.player1.vie -= 1
print("Collision / Suppression !")
#Ajouter bruitage vies
elif self.direction == "gauche" :
if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :
if self.rect.x >= 0 :
self.rect.x = self.rect.x - self.vitesse
else :
self.remove()
print("Suppression !")
else :
self.remove()
self.game.player1.vie -= 1
print("Collision / Suppression !")
elif self.player_actuel == "luigi" :
if self.direction == "droite" :
if not self.game.check_collision_sprite(self.rect, self.game.player1.rect) :
if self.rect.x <= 1600 :
self.rect.x = self.rect.x + self.vitesse
else :
self.remove()
print("Suppression !")
else :
self.remove()
self.game.player2.vie -= 1
print("Collision / Suppression !")
if self.direction == "gauche" :
if not self.game.check_collision_sprite(self.rect, self.game.player1.rect) :
if self.rect.x >= 0 :
self.rect.x = self.rect.x - self.vitesse
else :
self.remove()
print("Suppression !")
else :
self.remove()
self.game.player2.vie -= 1
print("Collision / Suppression !") |
Code:
1 2 3 4 5 6 7 8 9 10 11
| Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "/home/remi/Bureau/Oufioo/main.py", line 254, in <module>
game.ajout_projectile(game.direction_player1, "mario")
File "/home/remi/Bureau/Oufioo/game.py", line 43, in ajout_projectile
self.all_projectile.add(Projectile(self, direction, qui))
File "/usr/lib/python3/dist-packages/pygame/sprite.py", line 361, in add
sprite.add_internal(self)
File "/usr/lib/python3/dist-packages/pygame/sprite.py", line 163, in add_internal
self.__g[group] = 0
AttributeError: 'Projectile' object has no attribute '_Sprite__g' |