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

  1. #1
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    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 : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    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
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    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,

    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    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 : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    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).
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    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 expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    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 : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    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 ?
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    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 éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Hello,
    et pourquoi ne pas utiliser pygame pour gérer des sprites avec détection de collisions. Voir ici par exemple :

    Nom : pygame.gif
Affichages : 220
Taille : 121,0 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    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 : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Citation Envoyé par wiztricks Voir le message
    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
    Je tiens à formuler cela dans le 'kv file' . J'ai suivi le tutoriel Pong proposé dans la doc et c'est cette approche que je veux suivre...

    Citation Envoyé par jurassic pork
    Hello,
    et pourquoi ne pas utiliser pygame pour gérer des sprites avec détection de collisions.
    Hello,
    J'ai choisi kivy car prenant en charge l'écran tactile, pour un développement sur android.
    Peut-être qu'avec pygame, c'est aussi possible... mais pas nativement
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Bonjour,

    Citation Envoyé par Hominidé Voir le message
    J'ai choisi kivy car prenant en charge l'écran tactile, pour un développement sur android.
    Peut-être qu'avec pygame, c'est aussi possible... mais pas nativement
    Il est possible d'utiliser des modules graphiques tels que PyQt, Pygame, ... de façon native sur un écran tactile.
    Cependant, il est important de noter que Kivy est un module qui permet non seulement de travailler avec les écrans tactiles des appareils Android, mais également avec d'autres composants de ces appareils mobiles. Il est donc important de déterminer si ces fonctionnalités supplémentaires sont nécessaires pour ton projet avant de choisir Kivy comme module graphique.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    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 103
    Points : 4 449
    Points
    4 449
    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)
    $moi= ( !== ) ? : ;

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Je tiens à formuler cela dans le 'kv file' . J'ai suivi le tutoriel Pong proposé dans la doc et c'est cette approche que je veux suivre...
    Ah d'accord. Je ne le ferais pas avec le "kv file": il sert plutôt à déclarer les relations entre widgets. Et c'est quand même plus simple à programmer directement.

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

  12. #12
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    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 : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Citation Envoyé par wiztricks
    Ah d'accord. Je ne le ferais pas avec le "kv file": il sert plutôt à déclarer les relations entre widgets. Et c'est quand même plus simple à programmer directement.
    Effectivement bien plus simple...

    Merci à tous pour vos réponses.
    Je clôture ce sujet. Je continue mon étude de kivy.

    Sinon, l'un de vous à réalisé un projet avec kivy?
    kivy semble peu évoqué sur les forums francophones dont DVP ...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  13. #13
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    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 : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Citation Envoyé par Moi
    Je tiens à formuler cela dans le 'kv file' .
    Petit retour sur cette question.
    Réponse:
    Pour la création de widget à la volée depuis le 'kv file', on utilise Factory et pour faire l'équivalent d'une boucle for , on utilise la bibliothèque Jinja2 (à installer).
    Exemple d'écriture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #:import Factory kivy.factory.Factory
    BoxLayout:
        Button:
            text: "Button 1"
        Button:
            text: "Button 2"
        {% for i in range(5) %}
            Factory.Button:
                text: "Button {{ i }}"
        {% endfor %}
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  14. #14
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    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 103
    Points : 4 449
    Points
    4 449
    Par défaut
    bonjour
    Citation Envoyé par Hominidé Voir le message
    Sinon, l'un de vous à réalisé un projet avec kivy?
    kivy semble peu évoqué sur les forums francophones dont DVP ...
    Je déterre pour faire du hors-sujet (presque )

    je ne connais pas kivy mais par contre j'ai joué avec le nouveau framework flet.
    Ce framework utilise une app générique flutter incluse dans le module python qui exécute python et reprend même une syntaxe très très proche de flutter. Connaissant flutter, pour moi, la prise en main a été ultra rapide. Faire la même chose que flutter mais sans son environnement hyper-lourd, pour moi c'est le top.

    NOTE:
    - le support android n'est pas encore actif mais devrait l'être prochainement ... nous avons donc pour l'instant "que" windows, linux et js
    - Puisque très jeune, on n'a pas les 50 000 widgets de flutter (mais il est très simple d'en créer en python et on en trouve déjà)

    La gallerie ne donne pas trop envie , mais en cherchant un petit peu, on peut trouver des exemples plus engageants
    https://github.com/1Mr-Newton/WhatsApp-Clone-With-Flet
    https://github.com/iforvard/yf-manager
    https://github.com/LineIndent/Flet-Product-Design
    https://github.com/LineIndent/flet_ui_cards
    https://github.com/LineIndent/flet-modern-navbar
    https://github.com/nbilbo/flet-alquemy
    $moi= ( !== ) ? : ;

+ 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