IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Python Discussion :

plantage systematique de pygame


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 3
    Points
    3
    Par défaut plantage systematique de pygame
    Comme dis dans le titre, la fenêtre pygame plante systématiquement au bout de 5 secondes précisément ( j'ai chronométré ), j'ai essayé un grand nombre de forums, mais aucun ne m'a donné ma réponse.

    voici mon code :
    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
    24
    25
    26
    27
    import pygame
    from pygame.locals import *
    from threading import *
    import threading
    import time
    def th ( ) :
        tmp = 0
        print "ok"
        while tmp == 0 :
            t = pygame.key.get_pressed ( )
            a = 1
            while a == a :
                if t [a] == 1 :
                    print a
                a = a + 1
                if a == len ( t ) :
                    break
    thread = threading.Thread ( target = th )
    x = 0
    y = 0
    tmp = 0
    pygame.init ( )
    form = pygame.display.set_mode ( ( 800 , 600 ) )
    thread.start ( )
    pygame.display.flip()
    while tmp == tmp :
        pygame.display.flip()
    ne faite pas attention au thread, la problème étais la avant que je n’installe celui-ci.

    autre chose, je suis sous windows vista pro ( je ne sais pas cela a une influence mais on sait jamais )

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu n'es pas dans une boucle infinie là ?

    À quel moment temp change-t-il ? Donc, que temp != temp dans le premier cas et que temp != 0 dans le second cas.


    Qui plus est, temp est défini dans l'espace global et dans la fonction th. Sujet à confusion ça.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    c'est quoi "plante" ? Comme tu as une boucle sans fin, windows pas content ...

    je pense qu'il te faut plus de base python avant d'attaquer 'threading' et 'pygame'.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    bon dans un premier temps le thread est a part: il n'est pas la source du problème ( je l'ai retiré et il n'y a aucune différence ).

    ensuite a propos de la boucle infini c'est normal, il m'a été dis dans un tuto que la fonction "pygame.display.flip()" dois être activé en permanence, effectivement il n'y a pas de condition de sortie car avant de gérer la fermeture il faut tout d'abord qu'il fonctionne bien avant ( ceci est un programme pour tester pygame et comprendre son fonctionnement avant de m'engager a fabriquer réellement quelque chose )

    pour ce qui est du plantage: au bout de 5 sec précisément, la fenêtre est marqué "ne répond plus", je pense qu'il me manque une fonction dans mon programme qui empêche pygame d'interagir avec le système.

    ma question est donc très simple, quelle est la fonction a utiliser pour que pygame puisse fonctionner normalement

    bon voici mo prorame modifier pour etre plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import pygame
    from pygame.locals import *
    import time
    thread = threading.Thread ( target = th )
    x = 0
    y = 0
    tmp = 0
    pygame.init ( )
    form = pygame.display.set_mode ( ( 800 , 600 ) )
    thread.start ( )
    while tmp == 0 :
        pygame.display.flip()

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    dsl pour le double post mais la ligne 4 n'existe pas normalement =)

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Problème réglé!

    en fait le problème ne venais pas de la boucle ou du thread mais du fait que windaube ( windows vista pro ), tentais d'envoyer des messages a pygame comme il le fait avec tous ces logiciels, mais pygame ne l'écoutais pas, en fait tous ces messages sont stocké dans une liste qui peut être vidé avec la fonction pygame.event.pump(), maintenant quand je lance le programme il ne plante plus...

    merci quand même pour vos réponses ( même si ce n’étais pas les bonnes )

    par contre je suis déçu que cette fonction qui est vitale au bon fonctionnement de pygame ne soit mentionné dans AUCUN tuto sur le net, pour en apprendre l’existence j'ai du chercher des heures durant un forum.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    Citation Envoyé par kilian442 Voir le message
    ensuite a propos de la boucle infini c'est normal, il m'a été dis dans un tuto que la fonction "pygame.display.flip()" dois être activé en permanence
    n'importe quoi ...

  8. #8
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    cette fonction qui est vitale au bon fonctionnement de pygame ne soit mentionné dans AUCUN tuto sur le net
    C'est parce que 99% des codes utilisant pygame dépilent la pile d'events, et qu'il n'est donc pas nécessaire d'appeler pump(). Par contre tous les tutos expliquent qu'il faut traiter la pile d'event, ce que tu ne fais pas.

    La doc officielle pygame précise bien ce point

    pygame.event.pump

    internally process pygame event handlers
    pygame.event.pump(): return None

    For each frame of your game, you will need to make some sort of call to the event queue. This ensures your program can internally interact with the rest of the operating system. If you are not using other event functions in your game, you should call pygame.event.pump - internally process pygame event handlers to allow pygame to handle internal actions.

    This function is not necessary if your program is consistently processing events on the queue through the other pygame.event functions.

    There are important things that must be dealt with internally in the event queue. The main window may need to be repainted or respond to the system. If you fail to make a call to the event queue for too long, the system may decide your program has locked up.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    ouais, en général on capture le QUIT pour mettre en pause avant fermeture de la fenêtre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while pygame.event.wait().type != pygame.QUIT: pass

Discussions similaires

  1. [XL-2003] Plantage systematique sur la création automatique d'une macro
    Par Gautheron dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/05/2009, 07h20
  2. plantage systematique de mon xp
    Par adivinenza dans le forum Windows XP
    Réponses: 2
    Dernier message: 17/07/2008, 13h13
  3. Réponses: 7
    Dernier message: 20/08/2003, 10h33
  4. plantage a la deconnexion du client
    Par travail dans le forum 4D
    Réponses: 3
    Dernier message: 05/06/2003, 13h39
  5. [Kylix] Plantage IDE Kylix3/Mandrake 9.0
    Par OmicroN dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2003, 23h04

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