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

Programmation multimédia/Jeux Python Discussion :

Pygame déplacement d'objets [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Pygame déplacement d'objets
    Bonjour à tous,

    J'essai de faire un petit jeu ou je cherche a déplacer deux objets en meme temps avec deux touches différentes et cela même lorsque je reste appuyer sur une toucher permetant de le deplacer
    Donc j'avais utiliser cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pygame.key.set_repeat(400, 30)
    mais les deux objets ne se deplacait pas en même temps..
    Donc j'ai fais ce 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
     
    keys = pygame.key.get_pressed()                                                                                                                                                                                             
    if keys[K_DOWN] and pos_bat2 != (680, 300, 10, 100):                                                                                                                                                                        
        pos_bat2 = pos_bat2.move(0, 10)                                                                                                                                                                                         
        my_display()                                                                                                                                                                                                            
    if keys[K_UP] and pos_bat2 != (680, 0, 10, 100):                                                                                                                                                                            
        pos_bat2 = pos_bat2.move(0, -10)                                                                                                                                                                                        
        my_display()                                                                                                                                                                                                            
    if keys[K_z] and pos_bat1 != (10, 0, 10, 100):                                                                                                                                                                              
        pos_bat1 = pos_bat1.move(0, -10)                                                                                                                                                                                        
        my_display()                                                                                                                                                                                                            
    if keys[K_s] and pos_bat1 != (10, 300, 10, 100):                                                                                                                                                                            
        pos_bat1 = pos_bat1.move(0, 10)                                                                                                                                                                                         
        my_display()
    mais mon déplacement est beaucoup trop rapide..
    Je ne sais pas comment faire pour le ralentir, y'a-t-il une fonction comme sleep en c ou quelque chose du genre ?

    De plus je cherche à savoir comment déplacer un objet automatiquement ?

    Merci d'avance,

  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,

    Essaye come ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    keys = pygame.key.get_pressed()
    time.sleep(0.1)                                                                                                                                                                                      
    if keys[K_DOWN] ...
    tu changes la valeur du sleep en fonction du résultat.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Ca marche parfaitement merci beaucoup !

    Une idée pour faire un déplacement d'objet automatique toutes les secondes par exemple ?

  4. #4
    Membre régulier
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 52
    Points : 94
    Points
    94
    Par défaut
    Utilise un événement qui se place sur la queue des événements toutes les secondes avec pygame.time.set_timer.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    J'ai regarder comment on utiliser la fonction pygame.time.set_timer(), mais dans l'exemple je n'ai pas compris a quoi correspondait USEREVENT + 1

  6. #6
    Membre régulier
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 52
    Points : 94
    Points
    94
    Par défaut
    Comme tu l'as vu dans la doc, la fonction set_timer(eventid, milliseconds) prend en argument eventid. Ce n'est rien d'autre qu'un nombre. Quand dans pygame, tu écris if event.type == KEYDOWN, en fait tu vérifies si event.type vaut la valeur 2. Tu peux essayer dans l'interpréteur de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> import pygame
    >>> from pygame.locals import *
    >>> KEYDOWN
    2
    >>> USEREVENT
    24
    >>> NUMEVENTS
    32
    Donc chaque type d'événement a un nombre unique et tu as l'opportunité de créer de nouveaux types d'événements à partir du nombre 24 jusqu'à 32 (exclus), autrement dit depuis USEREVENT jusqu'à NUMEVENTS exclus.

    Voici un petit exemple tout simple
    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
    import pygame
    from pygame.locals import *
     
    pygame.init()
    pygame.display.set_mode((200, 200))
     
    ONE_SEC_EVENT = pygame.USEREVENT
    pygame.time.set_timer(ONE_SEC_EVENT, 1000)
     
    continuer = True
    while continuer:
        for event in pygame.event.get():
            if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE :
                continuer = False
            elif event.type == ONE_SEC_EVENT:
                print("Tic tac...")
     
        pygame.display.flip()
     
    pygame.quit()

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Les évenements USEREVENT et NUMEVENTS correspondent a des evenements du même type que KEYDOWN ?
    Je ne vois pas comment je peux les utilisés en fait..

  8. #8
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Ah d'accord j'ai compris ! En fait l’événement que je lui passe va être le temps d'attente entre mes actions ?

  9. #9
    Membre régulier
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 52
    Points : 94
    Points
    94
    Par défaut
    Oui, c'est ça. La fonction pygame.time.set_timer(eventid, milliseconds) va placer dans la queue des événements un événement du type que tu as défini (par exemple USEREVENT ou USEREVENT+1) tous les milliseconds temps.

    Lorsque tu récupères les événements à chaque tour de boucle, tu obtiendras ton événement une fois par seconde. Et donc tu pourras y réagir comme tu as envie.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Ca marche merci beaucoup !

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

Discussions similaires

  1. Déplacement d'objet entre select
    Par jonnyboy dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 14/05/2007, 11h29
  2. Effet de vague et déplacement d'objets
    Par goformat dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 23/02/2007, 01h25
  3. [Tkinter] déplacement d'objet
    Par airod dans le forum Tkinter
    Réponses: 2
    Dernier message: 02/05/2006, 09h26
  4. [FLASH] Déplacement des objets avec clavier ???
    Par 3adoula dans le forum Flash
    Réponses: 1
    Dernier message: 07/01/2006, 01h03
  5. Déplacement d'Objets
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/09/2003, 14h28

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