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 :

[kivy] Comment gérer le déplacement d'un lot d'images?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut [kivy] Comment gérer le déplacement d'un lot d'images?
    Bonjour,
    Comment gère t'on le déplacement d'un lot d'images (sprites) avec kivy?
    Avec tkinter, j'utiliserai un tag. Mais comment procéder avec kivy?
    Je n'ai pas su trouver l'info. Merci

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 063
    Par défaut
    Bonjour,

    Peut-être en utilisant la classe Image et la classe Animation,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from kivy.uix.image import Image
    from kivy.animation import Animation
     
     
    def move_images(image_paths, pixels):
        for path in image_paths:
            # charger l'image
            image = Image(source=path)
            # créer une animation pour déplacer l'image de tant de pixels
            animation = Animation(x=image.x+pixels, y=image.y+pixels)
            animation.start(image)
    Je n'ai pas testé, c'est juste pour l'exemple en lisant la doc

    Sources,


  3. #3
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Il me semble que animate() n'est pas adapté à une animation complexe qui comporterait des tests ... (?)
    Pour expliciter là où je bloque:
    à partir du code suivant,
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    from kivy.app import App
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty, NumericProperty
    from kivy.clock import Clock
    from kivy.vector import Vector
     
     
    from kivy.uix.widget import Widget
    Builder.load_string("""
    <MonImage>:
        canvas.before:
            Rectangle:
                pos: self.pos
                size: self.size
                source: 'crane.png'
            
    <BougeIm>:
        monImage: monImage
        MonImage:
            id: monImage
            pos: root.center
    """)
     
    class MonImage(Widget):
        pass
     
    class BougeIm(Widget):
        monImage = ObjectProperty(None)
        vecteur = Vector([4,0])
     
        def go(self):
            self.callback = Clock.schedule_interval(self.update, 1/60)
     
     
        def update(self,sn):
            self.monImage.pos = self.vecteur + self.monImage.pos
            if self.monImage.pos[0]+self.monImage.size[0] > self.width or self.monImage.pos[0] < 0:
                self.vecteur.x *= -1
     
    class TestApp(App):
        def build(self):
            bougedela = BougeIm()
            bougedela.go()
     
            return bougedela
     
    if __name__ == '__main__':
        TestApp().run()
    Ce code déplace une image sur l'horizontale de l'écran en partant de son centre vers la droite jusqu'à la limite de l'écran, puis repart dans l'autre sens. Ainsi de suite...
    Jusqu'à là pas de souci.
    Maintenant, je souhaite modifier le code afin d'ajouter d'autres images qui vont suivre le même cheminement.
    Pour ajouter une image, j'ajouterai une règle dans <BougeIm> :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    from kivy.app import App
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty, NumericProperty
    from kivy.clock import Clock
    from kivy.vector import Vector
     
     
    from kivy.uix.widget import Widget
    Builder.load_string("""
    <MonImage>:
        canvas.before:
            Rectangle:
                pos: self.pos
                size: self.size
                source: 'crane.png'
            
    <BougeIm>:
        monImage: monImage
        monImage2: monImage2
        MonImage:
            id: monImage
            pos: root.center
        MonImage:
            id: monImage2
            pos: (self.parent.width /2, self.parent.height* 3/ 4)
    """)
     
    class MonImage(Widget):
        pass
     
    class BougeIm(Widget):
        monImage = ObjectProperty(None)
        vecteur = Vector([4,0])
     
        def go(self):
            self.callback = Clock.schedule_interval(self.update, 1/60)
     
     
        def update(self,sn):
            self.monImage.pos = self.vecteur + self.monImage.pos
            self.monImage2.pos = self.vecteur + self.monImage2.pos
            if self.monImage.pos[0]+self.monImage.size[0] > self.width or self.monImage.pos[0] < 0:
                self.vecteur.x *= -1
     
    class TestApp(App):
        def build(self):
            bougedela = BougeIm()
            bougedela.go()
     
            return bougedela
     
    if __name__ == '__main__':
        TestApp().run()
    J'ai bien maintenant deux images qui suivent la même trajectoire depuis leur ordonnée respective.

    ok mais pour 20 images comment procéder? (imaginons un jeu de type space invender avec 20 monstres
    qui avancent en groupe).

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 752
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    ok mais pour 20 images comment procéder? (imaginons un jeu de type space invender avec 20 monstres
    qui avancent en groupe).
    Appliquer la même méthode à une collection d'images... c'est définir la collection et faire une boucle qui invoque la même méthode sur chaque objet.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Appliquer la même méthode à une collection d'images... c'est définir la collection et faire une boucle qui invoque la même méthode sur chaque objet.

    - W
    D'accord. Mais comment définit-on cette collection en langage Kv ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 752
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    D'accord. Mais comment définit-on cette collection en langage Kv ?
    Je ne comprends pas la difficulté.
    Pour moi, Kivy est une bibliothèque Python où on trouve list, dict,... et je ne vois pas pourquoi on ne pourrait pas faire des list d'Images Kivy ou des dict avec des clefs "tags" associées à des valeurs listes d'images.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    Citation Envoyé par Hominidé Voir le message
    Mais comment définit-on cette collection en langage Kv ?
    pas sûr de la demande, existe le dico "ids" pour justement itérer sur les composants qui ont un "id"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def MyInvaders.update(self):
      for id_img, img in self.ids.items():
        img.position.x += 4
        if 'bottom' in id_img and img.position.y > screen.height: raise(GameOver)

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

Discussions similaires

  1. Comment gérer les modifications sur un lot
    Par emeric2502 dans le forum Modélisation
    Réponses: 0
    Dernier message: 30/01/2015, 16h11
  2. Comment gérer plusieurs icones dans son exécutable ?
    Par declencher dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2003, 10h49
  3. Comment gérer ma carte réseau en ASM
    Par will1974 dans le forum Assembleur
    Réponses: 6
    Dernier message: 23/09/2003, 17h08
  4. Comment gérer la touche echap ?
    Par Adrael dans le forum C
    Réponses: 28
    Dernier message: 11/07/2003, 13h15
  5. Comment gérer les espaces blancs?
    Par Lambo dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/05/2003, 09h44

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