Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Pygame]Probleme d'utilisation de curseur personel

    28 août 2010 à 16:39:02

    Bonjour,

    J'ai créer un script avec pygame, il est censé faire une fenêtre blanche dans laquel le curseur de la souris se tranforme en viseur

    Or, lorsque je lance mon script, il ne répond et lorsque j'éssaie de le lancé avec IDLE, IDLE et mon script ne répondent pas

    Voici mon code :
    # -*- coding: cp1252 -*-
    #Importation des modules
    import pygame
    import os
    from pygame.locals import *
    pygame.init()
    
    #Définition de la fonction de chargement d'images
    def load_image(name, colorkey=None):
        fullname = os.path.join('C:/Python26/técomputer/TéGame/prototype', name)#Récupération du nom complet
        try:
            image = pygame.image.load(fullname)#Tester le chargement d'image
        except pygame.error, message:#Si erreur :
            print "Impossible de charger l'image :", name#Affichage de l'erreur
            raise SystemExit, message#Fermeture du programme
        image = image.convert()#Conversion de l'image pour l'espace colométrique
        if colorkey is not None:#S'il existe une colorkey
            if colorkey is -1:#Si la colorkey est égale à -1
                colorkey = image.get_at((0,0))#La colrkey est égale à 0, 0
            image.set_colorkey(colorkey, RLEACCEL)#Envoi de la nouvel colorkey à l'image
        return image, image.get_rect()#Variables retourné
    
    #Création de la classe du curseur
    class Curseur(pygame.sprite.Sprite) :
            
            #Définition de la fonction d'initialisation du sprite
    	def __init__(self) :#À l'appel de la classe
    		pygame.sprite.Sprite.__init__(self)#Initialisation du sprite
    		self.image, self.rect = load_image("viseur.png", -1)#Assignation de l'image viseur.png
    		
            #Définition de la fonction de positionnement du curseur
    	def update(self) :
    		pos = pygame.mouse.get_pos()#Récupération de la position du curseur
    		self.rect.midtop = pos#Déplacement du sprite
    
    #Création de la fenêtre
    screen = pygame.display.set_mode((640, 480))
    pygame.display.set_caption("Test")
    pygame.mouse.set_visible(0)#Effaçage du curseur
    #Création de l'arrière plan
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((250, 250, 250))
    screen.blit(background, (0, 0))
    pygame.display.flip()#Actualisation de la fenêtre
    
    pointeur = Curseur()#Création du curseur personnel
    
    allsprites = pygame.sprite.RenderPlain((pointeur))#Assignation de allsprites
    
    clock = pygame.time.Clock()#Création de l'horloge
    
    quitter = 0#Création de la variable quit
    
    #Boucle principale
    while quitter != 1:
        clock.tick(60)
        
        allsprites.update()#Actualisation des sprites
        
        #Actualisation de l'écran
        screen.blit(background, (0, 0))
        allsprites.draw(screen)
        pygame.display.flip
        
        #Fin de la boucle
        if pygame.key.get_pressed() :#Si une touche est active
            touche_active = pygame.key.get_pressed()#Assignation de la touche préssé à touche_active
            if touche_active == K_ESCAPE :#Si la touche active est Echap
                quitter = 1#Condition de fin de boucle vrai
    


    Quelq'un peut m'aider ?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 août 2010 à 20:34:31

      Citation

      C:/Python26/técomputer/TéGame/prototype



      Il y a pas pire pour se planter. Des accents sur les répertoires, une horreur

      Tu peux déjà corriger ça!!!

      Sous windows vaut mieux écrire ton path comme ceci

      C:\\Python26\\tecomputer\\TeGame\\prototype
      


      • Partager sur Facebook
      • Partager sur Twitter
        29 août 2010 à 11:43:26

        J'ai changé mon code pour ça :
        # -*- coding: cp1252 -*-
        #Importation des modules
        import pygame
        import os
        from pygame.locals import *
        pygame.init()
        
        #Définition de la fonction de chargement d'images
        def load_image(name, colorkey=None):
            fullname = os.path.join('C:\\tecomputer\\tegame\\prototype', name)#Récupération du nom complet
            try:
                image = pygame.image.load(fullname)#Tester le chargement d'image
            except pygame.error, message:#Si erreur :
                print "Impossible de charger l'image :", name#Affichage de l'erreur
                raise SystemExit, message#Fermeture du programme
            image = image.convert()#Conversion de l'image pour l'espace colométrique
            if colorkey is not None:#S'il existe une colorkey
                if colorkey is -1:#Si la colorkey est égale à -1
                    colorkey = image.get_at((0,0))#La colrkey est égale à 0, 0
                image.set_colorkey(colorkey, RLEACCEL)#Envoi de la nouvel colorkey à l'image
            return image, image.get_rect()#Variables retourné
        
        #Création de la classe du curseur
        class Curseur(pygame.sprite.Sprite) :
                
                #Définition de la fonction d'initialisation du sprite
        	def __init__(self) :#À l'appel de la classe
        		pygame.sprite.Sprite.__init__(self)#Initialisation du sprite
        		self.image, self.rect = load_image("viseur.png", -1)#Assignation de l'image viseur.png
        		
                #Définition de la fonction de positionnement du curseur
        	def update(self) :
        		pos = pygame.mouse.get_pos()#Récupération de la position du curseur
        		self.rect.midtop = pos#Déplacement du sprite
        
        #Création de la fenêtre
        screen = pygame.display.set_mode((640, 480))
        pygame.display.set_caption("Test")
        pygame.mouse.set_visible(0)#Effaçage du curseur
        #Création de l'arrière plan
        background = pygame.Surface(screen.get_size())
        background = background.convert()
        background.fill((250, 250, 250))
        screen.blit(background, (0, 0))
        pygame.display.flip()#Actualisation de la fenêtre
        
        pointeur = Curseur()#Création du curseur personnel
        
        allsprites = pygame.sprite.RenderPlain((pointeur))#Assignation de allsprites
        
        clock = pygame.time.Clock()#Création de l'horloge
        
        quitter = 0#Création de la variable quit
        
        #Boucle principale
        while quitter != 1:
            clock.tick(60)
            
            allsprites.update()#Actualisation des sprites
            
            #Actualisation de l'écran
            screen.blit(background, (0, 0))
            allsprites.draw(screen)
            pygame.display.flip
            
            #Fin de la boucle
            if pygame.key.get_pressed() :#Si une touche est active
                touche_active = pygame.key.get_pressed()#Assignation de la touche préssé à touche_active
                if touche_active == K_ESCAPE :#Si la touche active est Echap
                    quitter = 1#Condition de fin de boucle vrai
        


        Mais il ne répond toujours pas...
        Voici mon image(11 x 11) :
        Image utilisateur
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          29 août 2010 à 11:50:48

          Je ne vois plus d'erreurs, quelqu'un de plus apte que moi avec pygame pourra sûrement t'aider.

          • Partager sur Facebook
          • Partager sur Twitter
            3 septembre 2010 à 0:45:36

            Salut,

            J'ai commencé il y a peu à coder avec pygame, mais j'avoue que j'ai eu un peu de mal à me repérer dans la façon de faire...

            J'ai testé ton code, et apparament c'est plutôt au niveau de la gestion des événements que le bât blesse. Je te donne ma façon de faire, puisse-t-elle t'être profitable ! :p

            for event in pygame.event.get():
                    if event.type == QUIT:
                        quitter = 1
                    elif event.type == KEYDOWN:
                        if event.key == K_ESCAPE:
                            quitter = 1
            


            Et si je puis me permettre 2-3 remarques en plus (mais peut être que je n'ai pas compris une subtilité, dans ce cas merci de me renseigner ! ):
            • - Dans ta fonction load_image (je la connais bien, j'utilise la même, adaptée à du python 3), tu précises un chemin complet. Il n'y pas de risque pour ton programme de perdre sa portabilité ? Personnellement, j'utilise plutôt un chemin relatif au fichier... :euh:
            • - Je pense qu'il est inutile de blitter les surfaces et d'afficher le screen avant d'entrer dans ta boucle de jeu principale. Et si tu ne mets que dans la boucle principale les "blittages" ( :-° ) mieux vaut mettre le clock.tick(60) de la ligne 57 à la fin de la boucle, après tout les "blittages".
            • - La ligne 64 me semble fausse, flip est une méthode, pas un attribut (mais c'est vrai que dans la documentation de pygame, ils ne mettent pas les parenthèses...). Se serait plutôt :
              pygame.display.flip()
              


            Voili voilou, j'éspère t'avoir bien aidé. Si tu as encore des questions, n'hésites pas ! ;)

            Au passage, il n'y pas un tutorial sur pygame en cours de rédaction ?
            • Partager sur Facebook
            • Partager sur Twitter
              3 septembre 2010 à 19:38:00

              Je vais testé ...

              Ca marche mais mon curseur rouge deviens tout blanc o_O !

              Sinon où doit être mis clock.time, il doit être suprimmé ?

              Et il ne marche que quand je le lance depuis IDLE.
              • Partager sur Facebook
              • Partager sur Twitter
                4 septembre 2010 à 0:25:33

                Salut,

                Je n'utilise pas IDLE, et en modifiant comme je l'ai dis, je n'ai aucun problème. Quelle erreur est décrite par le compilateur ?
                • Partager sur Facebook
                • Partager sur Twitter
                  4 septembre 2010 à 19:54:53

                  Impossible de charger l'image viseur.png
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 septembre 2010 à 0:24:53

                    Bizarre, si ça ne te le faisait pas avant.
                    Bon, j'te donne le code que j'ai, sachant que le fichier "viseur.png" est dans le même dossier que le fichier .py.

                    # -*- coding: cp1252 -*-
                    #Importation des modules
                    import pygame
                    import os
                    from pygame.locals import *
                    pygame.init()
                    
                    #Définition de la fonction de chargement d'images
                    def load_image(name, colorkey=None):
                        try:
                            image = pygame.image.load(name)#Tester le chargement d'image
                        except pygame.error:#Si erreur :
                            print("Impossible de charger l'image :")
                            raise SystemExit#Fermeture du programme
                        image = image.convert()#Conversion de l'image pour l'espace colométrique
                        if colorkey is not None:#S'il existe une colorkey
                            if colorkey is -1:#Si la colorkey est égale à -1
                                colorkey = image.get_at((0,0))#La colrkey est égale à 0, 0
                            image.set_colorkey(colorkey, RLEACCEL)#Envoi de la nouvel colorkey à l'image
                        return image, image.get_rect()#Variables retourné
                    
                    #Création de la classe du curseur
                    class Curseur(pygame.sprite.Sprite) :
                            
                            #Définition de la fonction d'initialisation du sprite
                    	def __init__(self) :#À l'appel de la classe
                    		pygame.sprite.Sprite.__init__(self)#Initialisation du sprite
                    		self.image, self.rect = load_image("viseur.png", -1)#Assignation de l'image viseur.png
                    		
                            #Définition de la fonction de positionnement du curseur
                    	def update(self) :
                    		pos = pygame.mouse.get_pos()#Récupération de la position du curseur
                    		self.rect.midtop = pos#Déplacement du sprite
                    
                    #Création de la fenêtre
                    screen = pygame.display.set_mode((640, 480))
                    pygame.display.set_caption("Test")
                    pygame.mouse.set_visible(0)#Effaçage du curseur
                    #Création de l'arrière plan
                    background = pygame.Surface(screen.get_size())
                    background = background.convert()
                    background.fill((250, 250, 250))
                    screen.blit(background, (0, 0))
                    pygame.display.flip()#Actualisation de la fenêtre
                    
                    pointeur = Curseur()#Création du curseur personnel
                    
                    allsprites = pygame.sprite.RenderPlain((pointeur))#Assignation de allsprites
                    
                    clock = pygame.time.Clock()#Création de l'horloge
                    
                    quitter = 0#Création de la variable quit
                    
                    #Boucle principale
                    while quitter != 1:
                        
                        #Fin de la boucle
                        for event in pygame.event.get():
                            if event.type == QUIT:
                                quitter = 1
                            elif event.type == KEYDOWN:
                                if event.key == K_ESCAPE:
                                    quitter = 1
                        
                        allsprites.update()#Actualisation des sprites
                        
                        #Actualisation de l'écran
                        screen.blit(background, (0, 0))
                        allsprites.draw(screen)
                        pygame.display.flip()
                    	
                        clock.tick(60)
                    


                    C'est en python 3, donc il y aura sûrement des modifs à effectuer pour faire fonctionner en 2.6, mais j'te laisse gérer ça, quand même... ;)

                    Bye !
                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 septembre 2010 à 18:43:49

                      Ca ne marche toujours pas...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 septembre 2010 à 20:00:26

                        Toujours la même erreur ?
                        Es-tu bien sûr d'avoir le fichier viseur.png dans le même dossier que le fichier .py ?
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [Pygame]Probleme d'utilisation de curseur personel

                        × 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.
                        • Editeur
                        • Markdown