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] Quelques questions à propos des "objets visuels" [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 18
    Par défaut [Pygame] Quelques questions à propos des "objets visuels"
    Salut,

    J'aurais plusieurs questions à propos de Pygame :

    - Peut-on faire apparaitre plusieurs fois l'objet sur le même écran ? Par exemple, faire apparaitre bille1 à droite de l'écran, et ~2s après, faire apparaitre une deuxième fois bille1 à gauche de l'écran par exemple, tout en conservant l'objet bille1 à droite. Et ensuite, j'aimerais pouvoir faire bouger les deux objets indépendamment l'un de l'autre. Est-ce possible en utilisant la même variable ? Ou faut-il copier bille1 et avoir bille2 == bille1 ? Si c'est le cas, n'existe-il pas un moyen de n'utiliser qu'un nombre limité de variables pour faire apparaitre plusieurs fois le même objet ? En l'occurrence, je souhaite réutiliser un objet "note" dans un jeu typé GuitarHero. Notre écran est divisé en 7 colonnes, dans lesquelles les notes tombent. Je souhaite faire apparaitre l'objet note dans la 1ere colonne, puis 2s après, le faire apparaitre dans la 3e colonne par exemple, tout en conservant les mouvements de descentes automatiques de chacune des notes (et ce, jusqu'à la destruction de l'objet au point d'arrivée)

    - Ensuite, peut-on "supprimer" un objet de type Rect ? (ou Surface, si j'ai bien compris, le Rect = une Surface pour Pygame ?) J'ai cru comprendre qu'on ne pouvait que "le déplacer" sans pouvoir l'effacer, mais dans le cas présent, cela signifie que chaque objet ne pourra pas être réutilisé ?

    - Pour un projet de ce type, est-ce vraiment judicieux de conserver des notes de type Rect, ou est-il plus judicieux de passer sur des notes de type Sprite ? S'il faut passer sur du Sprite, quelles fonctions me permettraient de répondre aux questions précédentes ?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    En réalité, il faut faire une structure (une classe) contenant :
    • la position X et Y de votre élément
    • le sprite à utiliser pour l'afficher

    (dans la suite, je vais l'appeler Object (le nom n'est pas parfait).)

    Au début du programme, vous chargez tous les sprites de votre jeu, dans une banque (un dictionnaire).
    Ensuite, lorsque vous voulez créer un objet, vous faites une nouvelle instance Object que vous remplissez avec la bonne position/le sprite voulu pour afficher l'objet.

    Dans le jeu, vous allez avoir une liste d'objet (dans un tableau).
    Pour les dessiner, vous allez faire une boucle for, parcourant le tableau et dessinant chacun des objets du tableaux en utilisant leur X,Y et le sprite associé
    Pour mettre à jour, certainement une autre boucle.
    Pour supprimer, il suffit juste de virer l'Objet du tableau.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 18
    Par défaut
    Merci pour la réponse
    Je suis actuellement en train de créer ma classe, mais je suis un peu perdu...Je n'ai en effet pas encore bien compris les notions de classes et de dictionnaires (nous n'en avons pas vraiment entendu parler en ISN, et malgré quelques recherches, je suis toujours un peu perdu)

    J'ai pour l'instant créé ma classe Note avec une fonction SpawnNote:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Note(pygame.sprite.Sprite):
        """Création de la classe "Note" """
        def __init__(self, note_x, note_y):
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.image.load('note.jpg').convert()
            self.x = note_x
            self.y = note_y
     
    def SpawnNote(note_x, note_y):
        return Note(note_x, note_y)

    Je dois ensuite créer une Liste contenant les coordonnées note_x et note_y ainsi que le temps note_timespawn de chaque note, et ainsi pouvoir les réutiliser avec la fonction SpawnNote, c'est bien ça ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    À priori, il vous suffit d'avoir une liste de Note.
    Avez vous un peu zieuter les tutoriels alentours : http://python.developpez.com/cours/

    Sinon, voici une classe ultra basique (pas très Python dans l'âme à vrai dire) que j'avais fait : https://github.com/Paris-Coders/jeux...hmup/entity.py
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 18
    Par défaut
    J'utiliserai donc une liste Liste_note, que je vais remplir avec une boucle (dans l'ordre : je crée la classe, je crée une boucle qui va donner les différents paramètres que les Notes doivent prendre (x, y, temps d'apparition), puis je les mets dans la Liste), c'est bien ça ?

    J'ai regardé rapidement les tutoriels sur les Classes, c'est justement ça qui m'a aidé à comprendre un peu plus les Classes (notamment ce qu'il y avait entre parenthèses après la classe)

    Si j'utilise ce modèle, les Notes n'hériteront donc pas de la classe pygame.sprite, non ?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Je verrai plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    notes = [] # Création de la liste
    for i in seq(10): # Création de dix éléments
        notes.append(Note(sprite, x, y))
    Voilà.
    Par contre, je modifierai votre constructeur, pour ne plus faire de init() de sprite, ni rien, juste une copie de la variable passée au constructeur.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/06/2015, 11h17
  2. Quelques question à propos des technologies RAID
    Par DranDane dans le forum Composants
    Réponses: 6
    Dernier message: 12/08/2008, 12h40
  3. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31
  4. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03

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