Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1

    Homme Profil pro kilian riou
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Homme kilian riou
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2012
    Messages : 12
    Points : -1
    Points
    -1

    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 :
    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
    Membre Expert

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 503
    Points : 2 211
    Points
    2 211

    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.
    Vincent
    Oqapy . Qarte . PaQager

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 728
    Points : 791
    Points
    791

    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

    Homme Profil pro kilian riou
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Homme kilian riou
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2012
    Messages : 12
    Points : -1
    Points
    -1

    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 :
    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

    Homme Profil pro kilian riou
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Homme kilian riou
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2012
    Messages : 12
    Points : -1
    Points
    -1

    Par défaut

    dsl pour le double post mais la ligne 4 n'existe pas normalement =)

  6. #6

    Homme Profil pro kilian riou
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Homme kilian riou
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2012
    Messages : 12
    Points : -1
    Points
    -1

    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 chevronné
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 728
    Points : 791
    Points
    791

    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 émérite
    Inscrit en
    août 2010
    Messages
    822
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 822
    Points : 846
    Points
    846

    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 chevronné
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 728
    Points : 791
    Points
    791

    Par défaut

    ouais, en général on capture le QUIT pour mettre en pause avant fermeture de la fenêtre:

    Code :
    while pygame.event.wait().type != pygame.QUIT: pass

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •