Bonjour a tous je m'essai a pygame et j'ai suivi le tuto proposé sur ce site mais j'ai un problème quand j'essai de bouger une image avec ce code :
continuer = 1
while continuer:
for event in pygame.event.get():
if event.type == QUIT:
continuer = 0
if event.type == KEYDOWN:
if event.key == K_DOWN:
pos_roib = pos_roib.move(240,160)
fenetre.blit(fond, (0,0))
fenetre.blit(roib, pos_roib)
pygame.display.flip()
l'erreur qui m'est affichée est : "AttributeError: 'tuple' object has no attribute 'move'" mais je comprends pas pourquoi si quelqu'un pourrait m'aider je lui en serait reconaissant !
pos_roib étant certainement un tuple, au contraire si on connaît un peu python, on sait très bien qu'il n'a pas d'attribut move, une simulation rapide sur l'interpréteur (utilises le beaucoup, énormement, sans limite) démontre cela
>>> a = (1,)
>>> type(a)
<class 'tuple'>
>>> a.move(240, 160)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'move'
Bref pos_roib n'est pas l'objet adéquate pour ce type d'attribut, je pense plus à un objet Rect
roib en effet est une surface, normal de la bouger, il faut comprendre pygame, en loadant une image, tu crées une Surface, représentant la surface de l'image, on peut la déplacer.
pos_roib n'est qu'un tuple, c'est un objet python, qui ne sait même pas qu'on utilise le module pygame, difficile pour lui de deviner ce que tu souhaites faire.
Ah oui en effet..... je n'y avais pas pensé... merci beaucoup pour votre aide.
J'ai réussi a résoudre mon problème juste en donnant une nouvelle valeur a pos_roib, j'arrive bien a déplacer l'image mais toutes les autres surfaces présentes sur mon fond disparaissent, je suis obligé de les "bliter" a chaque fois que mes surfaces font un mouvement ?
EDIT : J'ai réussi il fallait juste que je "blit" pas le fond mais maintenant roib est a son ancienne position et a la nouvelle est-ce qu'il y a une manière simple pour régler ce problème ?
un tuple est un objet non mutable, on ne peux donc pas le modifier (enfin si mais c'est assez relou) item par item (genre a = 1, 1 ; a[0] += 1)
utilise plutot x et y. c'est ce que je fais pour mon jeu, et ca marche parfaitement.
exemple:
import pygame
from pygame.locals import *
x, y = 0, 0
taille_sprite = 32
def update(ecran, *surfaces):
for i in surfaces:
ecran.blit(i[0], i[1])
while True:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_LEFT:
x -= taille_sprite
elif event.key == K_RIGHT:
x += taille_sprite
update(ecran, (personnage, (x, y)))
pygame.display.flip()
j'ai pas defini ecran et personnage ici, a toi de la faire.
perso je prefere me baser la dessus, on envoie la surface ET la position dans un tuple.
par contre !! attention, avec ce code, l'ordre des arguments non nommés que l'on envoie a update est primordiale !!
envoie en premier ton fond, et en dernier ton personnage !
relit mon message, ca depend de l'ordre dans lequel tu enverras tes images.
et pis, par la meme occas', au lieu de demander, test !
Pygame
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Python c'est bon, mangez-en.