Merci beaucoup Kayou !!!
C’est exactement ce qu’il me faut !
Je vous suis franchement reconnaissant de votre aide à tous deux, je vous donnerais un lien pour télécharger le jeu dés que je l’aurais terminé
Il s’agit d’un robot que l’on dirige contre d’autres robots et sa première mission est de se sauver de l’usine où il a été construit.
De ce qu’a posté Kayou,
J’ai cette ligne qui a 3 paramètres :
def crop(orig_surf, pos, size):
Alors que moi j’ai un rect à la place : (le rect robot_pos)
robot_back=crop(fond,robot_pos)
Comment je peux faire pour que ça marche ?
La position de mon rect c’est le point central(xy) du rect. donc c’est pas son coin haut/gauche.
le message d’erreur c’est qu’il me manque le paramètre "size" mais c’est normal puisque dans le rect il est inclu. Le problème c’est que la fonction crop() demande ce paramètre.
Je croyais avoir trouvé la solution pour convertir mon rect en x,y et size : ………………………
robot_back=crop(fond,robot_pos.pos,robot_pos.size)
j’avais mis rect.pos et rect.size ….. donc robot_pos.pos et robot_pos.size
Mais python dit que le rect n’a pas le terme pos dans ses valeurs (il ne connait pas)
Il faudrait peut-être que je modifie la fonction crop pour quelle fonctionne avec un rect comme parametre mais je sais pas comment faire.
L’autre choix que j’ai c’est de me débrouiller pour lui fournir ce qu’elle demande : la position et la taille, au lieu de lui donner le rect. …….
Mais je vois pas comment :/ ……..
Moi ce que je connais c’est le centre du rect et sa taille.
La fonction crop() en fait retourne une surface qu’elle crée avec ça :
dest_surf = piggame.Surface(size, flags=pg.SRCALPHA)
J’ai bossé toute la nuit pour essayer d’adapter mon rect à la fonction fournie par Kayou
j’ai trouvé ça :
def crop(orig_surf, rect, size):
""" orig_surf : pg.Surface --> image d'origine
size : (sx, sy) --> taille de la zone copier
pos : (px, py) --> origine de la zone a copier depuis orig_surf"""
surf = pygame.Surface(size, flags=pygame.SRCALPHA)
surf.blit(orig_surf, rect)
return surf
Et en faisant ça :
copie dans robot_back la zone de l’image "fond" indiquée par le rectangle robot_pos et de taille 51x51.
robot_back=crop(fond,robot_pos,(51,51))
ça donne pas de message d’erreur mais ça na pas d’effets. En si ça me crée une surface transparente vide qui a pour nom robot_back et de taille 51x51, mais ce que je voudrais obtenir c’est la copie du fond de taille 51x51 à la position donnée par rect donc par robot_pos.
d’après ce que je comprend, pour copier une zone, il faut utiliser la méthode blit() qui appartient à la surface de destination, et qui a besoin pour ça d’une surface source et d’un rect.
donc si je fais théoriquement ça :
robot_back=crop(fond,robot_pos,(51,51))
robot_back.blit(fond,robot_pos)
C’est sensé me faire une copie vers robot_back mais ça marche pas.