Jeu saccadé: Timer ? Thread? sous python.

cs_Linkey Messages postés 1 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 15 avril 2010 - 15 avril 2010 à 20:11
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 1 mai 2010 à 23:38
Bonjour,
Je débute sous python.
J'essaie de créer un jeu Space Invader pour apprendre à utiliser Pygame.
J'utilise une main loop pour détecter toutes les touches tapées par l'utilisateur, mais je l'utilise aussi pour faire bouger les vaisseaux spatiaux ennemis.

Problème: à chaque fois que le joueur bouge, que les ennemis bougent ou que le tir d'un deux bouge, je doit rafraichir le fond d'écran et tous les vaisseaux. Forcément sa saccade, au bout de deux tirs les vaisseaux ennemis ne bougent plus.

D'où ma question:
Existe -t- il une possibilité de timer ou thread sous Python qui permettrait d'exécuter des taches en arrière plan (faire bouger les ennemis) sans ralentir mon jeux.
Ou bien, est ce que je n'optimise pas suffisamment mon programme ?

Merci.

Main loop:

    while inGame:

        count = count +1
        
#------ displaying player ship
        move(clavier()) # détection des controles
#--------- end

#----- displaying computers ships
        if(Computer.loose == False):

            if (count%170)==0:
                Computer.moveAll(width)
                screen.blit(background,backgroundRect)
                for x in Computer.ships:
                    screen.blit(x.image, x.rect )
                screen.blit(Comica.image, Comica.rect)
                count = 1
#-------- end

#---- shooting display
            if shooted == 1:
                for x2 in shoots:
                    screen.blit(x2.image,x2.rect)
                    if ((x2.test == True) & ((count%25)==0)):
                        screen.blit(background, backgroundRect )
                        for x in Computer.ships:
                            screen.blit(x.image, x.rect )
                        screen.blit(Comica.image, Comica.rect)
                        x2.Continue(Computer)
                    elif(x2.test == False):
                        shoots.remove(x2)
#----------end    
        else:
        #---- lost...
            inGame = False
            screen.blit(Computer.image, Computer.rect )
           
        pygame.display.update()
A voir également:

1 réponse

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
1 mai 2010 à 23:38
Bonjour,

Il existe un module threading qui te permet d'exécuter une fonction dans un thread. J'en ai eu besoins avec Tkinter. Voilà comment j'ai fais :

import threading
threading.Thread(None, myFunction, None, (), {}).start()


Plus généralement ce donne cela :
threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
> group ?
> target le nom de ta fonction à exécuter dans un Thread
> name le nom de ton Thread
> args les arguments de ta fonction
> kwargs ?
0
Rejoignez-nous