Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Problème d'affichage image Pygame [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : février 2015
    Messages : 118
    Points : 60
    Points
    60
    Par défaut Problème d'affichage image Pygame
    Bonsoir,
    Je cherche une âme charitable pour m'aider.
    J'ai un code qui est censé ouvrir une image "egg1" sur événement clique gauche. Elle est censée se positionner 50 ordonnées en dessous d'une autre image "new_direction".
    Le soucis c'est que l'image ne se crée pas , et que l'image new_direction descend de 50 ordonnées à chaque cliques.
    Je ne vois vraiment pas comment cela arrive.
    Voici le bout de code concerner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    elif event.type == MOUSEBUTTONDOWN  and player.getOeufs > 0:
    				#Clic souris pour tirer
    				player.tir()
    				#on eleve un oeufs au joueur
    				image_tir = pygame.image.load(egg1).convert_alpha()
    				tir_position = player.getPosition()
    				tir_position[1] += 50 
    				print image_tir, egg1
    				tirer = 1
    		if tirer ==1 :
    			fenetre.blit(image_tir, tir_position)
     
    		#Affichages aux nouvelles positions
    		fond_jeu = pygame.image.load(background_jeu).convert()
    		fenetre.blit(fond_jeu, (0,0))
    		image_poule = pygame.image.load(new_direction).convert_alpha()
    		print image_poule
    		fenetre.blit(image_poule, new_position)
    		image_oeuf = pygame.image.load(new_etat).convert_alpha()
    		fenetre.blit(image_oeuf, egg.getPosition())
     
     
    		pygame.display.flip()
    De plus, j'ai un autre problème moin important, mais l'autre condiction de lancement du tir est que , mais celle-ci ne fonctionne pas puisque même lorsque je franchis le 0, le clique marche encore

    Merci pour votre aide

  2. #2
    Membre éprouvé

    Homme Profil pro
    ValueError
    Inscrit en
    avril 2016
    Messages
    689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ValueError

    Informations forums :
    Inscription : avril 2016
    Messages : 689
    Points : 1 018
    Points
    1 018
    Billets dans le blog
    1
    Par défaut
    Salut.

    Il n'est pas envisageable de demander à pygame de charger une image dans la boucle du jeu,
    Les images se chargent une unique fois à l'initialisation du jeu, car t'imagines bien qu'avec un fps par exemple à 30, cela va ralentir énormément ton jeu.

    Il n'y a non plus aucun intérêt à développer avec python2.

    Maintenant, en fait si ton image s'affiche, mais est cachée par le blit du fond, car tu blit image_tir si ta condition est réunie, mais ensuite tu blit fond_jeu par dessus.
    Le temps ronge l'amour comme l'acide.

  3. #3
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : février 2015
    Messages : 118
    Points : 60
    Points
    60
    Par défaut
    Bonjour et merci pour votre réponse. Je n’avais effectivement pas vu cette erreur merci beaucoup.
    Oui jai appris python en Python 2 donc je l’utilise maintenant , mais cela est t’il vraiment dérangeant ? Pour les performances ?
    Quand à la condition «*player.getOeufs > 0 «* , savez vous pourquoi celle ci ne fonctionne pas ?
    Merci de votre aide.

  4. #4
    Membre éprouvé

    Homme Profil pro
    ValueError
    Inscrit en
    avril 2016
    Messages
    689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ValueError

    Informations forums :
    Inscription : avril 2016
    Messages : 689
    Points : 1 018
    Points
    1 018
    Billets dans le blog
    1
    Par défaut
    En ce qui concerne python2, cela ne change pas grand chose aux performances par rapport à python3, mais le développement et maintenance de python2 sera abandonné très prochainement, donc autant développer ton jeu avec la dernière version de python, sans compter les multiples avantages à utiliser python3.

    Sinon, je n'ai pas bien saisi le problème.
    Que fait exactement cette méthode getOeufs ? Montre le code de cette méthode, voir éventuellement celui de la classe Player si le code n'est pas trop gros.
    Le temps ronge l'amour comme l'acide.

  5. #5
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : février 2015
    Messages : 118
    Points : 60
    Points
    60
    Par défaut
    Je ne suis pas chez moi donc j'ai pas le code sous les yeux.
    En fait mon getOeuf me sert simplement à récupérer la valeur "oeuf" de mon dictionnaire poule. Le fonction ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def getOeuf():
    return poule["oeufs"]
    Mais là n'est pas le problème puisque celle-ci retourne bien le nombre d'oeufs.
    Au clique, j'appelle aussi ma fonction tir du module player.Elle me permet de retirer 1 oeufs a chaque clique. Ceux-ci sont retirer dans poule["oeufs"].
    Cette étape marche également j'ai vérifié son fonctionnement.
    Le soucis vient de cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elif event.type == MOUSEBUTTONDOWN  and player.getOeufs > 0:
    car lorsque player.getOeufs est <= à 0, le if s’exécute quand même.
    J’espère avoir été assez clair :/

  6. #6
    Membre éprouvé

    Homme Profil pro
    ValueError
    Inscrit en
    avril 2016
    Messages
    689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ValueError

    Informations forums :
    Inscription : avril 2016
    Messages : 689
    Points : 1 018
    Points
    1 018
    Billets dans le blog
    1
    Par défaut
    Il y a forcément un problème avec le nombre de ces oeufs.
    Où la valeur du nombre de ces oeufs est décrémentée ?

    On voit bien dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #on eleve un oeufs au joueur
    Mais ce qui décrémente le nombre d'oeufs, c'est quoi ?
    C'est à mon avis de ce côté qu'il faut chercher, et sans avoir un aperçu de ton code entier, difficile à dire.
    Le temps ronge l'amour comme l'acide.

  7. #7
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : février 2015
    Messages : 118
    Points : 60
    Points
    60
    Par défaut
    Elle est justement décrémentée dans .
    La fonction tir doit ressembler à cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def tir():
          poule["oeuf"] += -1
          return poule["oeuf"]
    Mais je suis certain que cette décrémentation fonctionne puisque je l'ai print et qu'elle effectuait correctement.

  8. #8
    Membre éprouvé

    Homme Profil pro
    ValueError
    Inscrit en
    avril 2016
    Messages
    689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ValueError

    Informations forums :
    Inscription : avril 2016
    Messages : 689
    Points : 1 018
    Points
    1 018
    Billets dans le blog
    1
    Par défaut
    Hum, l'erreur est tellement flagrante que je l'ai même pas vue, désolé.

    player.getOeufsest donc une méthode, sauf que tu n'as pas mit les parenthèses, donc player.getOeufs est la réfrence à cette méthode, et donc faire if unefonction retournera toujours True.
    Le temps ronge l'amour comme l'acide.

  9. #9
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : février 2015
    Messages : 118
    Points : 60
    Points
    60
    Par défaut
    Woaw oui maintenant que tu le dis on se sent un peu c**
    Je devrais peut être me coucher plus tôt la prochaine fois !
    Merci beaucoup pour ton aide!!

  10. #10
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : février 2015
    Messages : 118
    Points : 60
    Points
    60
    Par défaut
    Re-bonsoir :/
    Je me suis finalement rendu compte que mon problème initial n'était pas totalement résolu.
    J'avais effectivement dit que ma poule descendait de 50 alors que c'est l'oeuf qui doit apparaître 50 en dessous de la poule.
    Le soucis c'est que l'oeuf apparaît bel et bien grâce à toi 50 sous la poule, mais la poule descend toujours.
    Je ne comprend pas a quel moment la position de la poule est affectée par cela puisque je la récupère simplement sans la modifier.
    Voici le code principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    elif event.type == MOUSEBUTTONDOWN  and player.getOeufs() > 0 and int(round(time.time())) > next_oeuf:
    				#Temporisation
    				next_oeuf = int(round(time.time())) + 1
    				#On eleve un oeuf au joueur et on crée le tir
    				tir_position = player.tir()
    				tirer = 1
    		if tirer ==1 :
    			fenetre.blit(image_tir, tir_position)
     
    		#Affichages aux nouvelles positions et eventuelle nouvelle forme
    		image_poule = pygame.image.load(new_direction).convert_alpha()
    		fenetre.blit(image_poule, new_position)
    		image_oeuf = pygame.image.load(new_etat).convert_alpha()
    		fenetre.blit(image_oeuf, egg.getPosition())
     
     
    		pygame.display.flip()
    et celui de la fonction tir qui décrémente de nombre d'oeufs et qui est censé créer les coordonnée de l'oeuf tiré:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def tir():
    	oeuf = getOeufs()
    	setOeufs(oeuf - 1)
    	tir_position = poule["position"]
    	tir_position[1] += 50 
    	return tir_position
    C'est la dernière fois que je t’embête :/
    Merci de ton aide!

  11. #11
    Membre éprouvé

    Homme Profil pro
    ValueError
    Inscrit en
    avril 2016
    Messages
    689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ValueError

    Informations forums :
    Inscription : avril 2016
    Messages : 689
    Points : 1 018
    Points
    1 018
    Billets dans le blog
    1
    Par défaut
    Salut.

    Citation Envoyé par Patouillou Voir le message
    Je ne comprend pas a quel moment la position de la poule est affectée par cela puisque je la récupère simplement sans la modifier.
    Tu crois ne pas la modifier, mais tu la modifies bien dans ta fonction tir.
    tir_position réfère à la même liste que poule['position'].

    Tu peux tester cela simplement dans un interpréteur python.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> poule = dict(position=[5, 5])
    >>> tir_position = poule['position']
    >>> tir_position[1] += 50
    >>> poule
    {'position': [5, 55]}
    Ta fonction devrait donc faire soit une copie de la liste poule["position"] avant de faire une modification, soit utiliser un tuple, ce qui semble le mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def tir():
    	oeuf = getOeufs()
    	setOeufs(oeuf - 1)
    	x, y = poule["position"]
    	y += 50 
    	return x, y
    Le temps ronge l'amour comme l'acide.

  12. #12
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : février 2015
    Messages : 118
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup !
    Je me suis donc renseigner sur la copie puisque je trouvait ça plus simple et j'ai appris que la copie de liste ne s'effectuait pas comme une copie d'une simple variable.
    Donc j'ai simplement écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tir_position = list(poule["position"])
    et cela fonctionne comme je le voulait !
    Je te remercie pour ton aide!!
    Bonne journée à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage images
    Par L1011 dans le forum Word
    Réponses: 2
    Dernier message: 16/02/2009, 15h31
  2. Problème d'affichage Image
    Par mappy dans le forum ASP.NET
    Réponses: 3
    Dernier message: 26/06/2008, 23h28
  3. problème d'affichage image
    Par mehdiing dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 03/06/2008, 11h08
  4. Probléme d'affichage image d'empreinte
    Par usto2005 dans le forum Powerpoint
    Réponses: 1
    Dernier message: 26/05/2008, 20h53
  5. Problème d'affichage : image hover
    Par FunkyBearz dans le forum Mise en page CSS
    Réponses: 22
    Dernier message: 27/02/2007, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo