Problème pygame pour modifier un Rect
Jules_Bourillon
-
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 à vous. Dans mon code, j’ai une class Decor(pygame.sprite.Sprite) me permettant d’afficher une image d’arbre. Cet arbre, je le téléporte à un endroit précis avec cette fonction (où map.get_object(f"{self.name}_spawn ») m’indique une position en fonction du nom de l’objet):
` def teleport_spawn_decor(self, map):
point = map.get_object(f"{self.name}_spawn")
self.rect[0] = point.x
self.rect[1] = point.y`
Ainsi lorsque je lance mon code l’arbre change bien de position et pourtant lorsque je print son rect, on me renvoie que self.rect[0] et [1] sont égales à 0 soit la position initiale de l’arbre. J’aimerais pouvoir modifier le rect de mon arbre pour pouvoir ensuite gérer les collisions mais je ne sais pas comment Voici la partie du code en entier si besoin:
En espérant avoir été clair, je vous remercie d’avance pour vos réponses :) Jules
` def teleport_spawn_decor(self, map):
point = map.get_object(f"{self.name}_spawn")
self.rect[0] = point.x
self.rect[1] = point.y`
Ainsi lorsque je lance mon code l’arbre change bien de position et pourtant lorsque je print son rect, on me renvoie que self.rect[0] et [1] sont égales à 0 soit la position initiale de l’arbre. J’aimerais pouvoir modifier le rect de mon arbre pour pouvoir ensuite gérer les collisions mais je ne sais pas comment Voici la partie du code en entier si besoin:
#Fichier Decor
import pygame
class Decor(pygame.sprite.Sprite):
def __init__(self, name, map_manager, inventaire):
super().__init__()
self.name = name
self.image = pygame.image.load(f"{self.name}.png")
self.rect = self.image.get_rect()
self.map_manager = map_manager
self.inventaire = inventaire
def teleport_spawn_decor(self, map):
point = map.get_object(f"{self.name}_spawn")
self.rect[0] = point.x
self.rect[1] = point.y
class Tree(Decor):
def __init__(self, map_manager, inventaire):
super().__init__("arbre", map_manager, inventaire)
def update(self): #Fonction ensuite mise dans une boucle While
print(self.rect)
#Fichier Map
@dataclass
class Map:
name: str
decor: list[Decor]
class MapManager:
def __init__(self, screen, player):
self.is_playing = False
self.maps = dict()
self.screen = screen
self.player = player
self.current_map = "carte_Test_RPG"
self.register_map('carte_Test_RPG', decor=[
Tree(self, Inventaire)
])
self.teleport_decor()
def teleport_decor(self):
for map in self.maps:
map_data = self.maps[map]
decors = map_data.decor
for decor in decors:
decor.teleport_spawn_decor(self)
En espérant avoir été clair, je vous remercie d’avance pour vos réponses :) Jules
A voir également:
- Problème pygame pour modifier un Rect
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Modifier story facebook - Guide
- Modifier l'extension d'un fichier - Guide
- Logiciel pour modifier une carte d'identité - Télécharger - Suite bureautique
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
peux-tu partager du code permettant de tester cela?
peux-tu partager du code permettant de tester cela?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Pour t'aider à comprendre:
au lieu de
fais plutôt
et ajoute ce même
au lieu de
print(self.rect)
fais plutôt
print(self,self.rect)
et ajoute ce même
print()dans
teleport_spawn_decor().
En fait, c'est bizarre quand je fais print de mon rect depuis ma class Tree, il m'affiche ça:
<rect(391, 713, 150, 150)>
<rect(0, 0, 150, 150)>
<rect(391, 713, 150, 150)>
<rect(0, 0, 150, 150)>
<rect(391, 713, 150, 150)>
...
Mais quand je fais la même chose depuis ma class Decor, il m'affiche ça:
<rect(0, 0, 150, 150)>
<rect(0, 0, 150, 150)>
<rect(0, 0, 150, 150)>
...
Tu veux que je te passe une partie du code pour le tester ?
<rect(391, 713, 150, 150)>
<rect(0, 0, 150, 150)>
<rect(391, 713, 150, 150)>
<rect(0, 0, 150, 150)>
<rect(391, 713, 150, 150)>
...
Mais quand je fais la même chose depuis ma class Decor, il m'affiche ça:
<rect(0, 0, 150, 150)>
<rect(0, 0, 150, 150)>
<rect(0, 0, 150, 150)>
...
Tu veux que je te passe une partie du code pour le tester ?
Ok j'ai essayé des trucs, quand je fais ton truc en print(self.rect[0], self.rect[1], self), j'obtiens ça:
[0, 0] <Tree Sprite(in 0 groups)>
[391.0, 713.667] <Tree Sprite(in 1 groups)>
[0, 0] <Tree Sprite(in 0 groups)>
[391.0, 713.667] <Tree Sprite(in 1 groups)>
[0, 0] <Tree Sprite(in 0 groups)>
[391.0, 713.667] <Tree Sprite(in 1 groups)>
En gros, quand je modifie le rect 1 fois, ça affiche une fois la version modifié et l'autre fois définie dans self__init__
Ce que je peux faire c'est modifié le Rect indéfiniment dans la fonction update
[0, 0] <Tree Sprite(in 0 groups)>
[391.0, 713.667] <Tree Sprite(in 1 groups)>
[0, 0] <Tree Sprite(in 0 groups)>
[391.0, 713.667] <Tree Sprite(in 1 groups)>
[0, 0] <Tree Sprite(in 0 groups)>
[391.0, 713.667] <Tree Sprite(in 1 groups)>
En gros, quand je modifie le rect 1 fois, ça affiche une fois la version modifié et l'autre fois définie dans self__init__
Ce que je peux faire c'est modifié le Rect indéfiniment dans la fonction update