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
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
Cette année, je fais mumuse sur Androïd avec python/kivy ...
Bonjour,
Peut-être en utilisant la classe Image et la classe Animation,
Je n'ai pas testé, c'est juste pour l'exemple en lisant la doc
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)
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)
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,
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...
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()
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> :
J'ai bien maintenant deux images qui suivent la même trajectoire depuis leur ordonnée respective.
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()
ok mais pour 20 images comment procéder? (imaginons un jeu de type space invender avec 20 monstres
qui avancent en groupe).
Cette année, je fais mumuse sur Androïd avec python/kivy ...
Hello,
et pourquoi ne pas utiliser pygame pour gérer des sprites avec détection de collisions. Voir ici par exemple :
Ami calmant, J.P
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Bonjour,
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...
Hello,Envoyé par jurassic pork
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
Cette année, je fais mumuse sur Androïd avec python/kivy ...
Bonjour,
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)
bonjour
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= (!==
) ?
:
;
Bonjour,
Effectivement bien plus simple...Envoyé par wiztricks
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 ...
Cette année, je fais mumuse sur Androïd avec python/kivy ...
Bonjour,
Petit retour sur cette question.Envoyé par Moi
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 %}
Cette année, je fais mumuse sur Androïd avec python/kivy ...
bonjour
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 actifmais 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= (!==
) ?
:
;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager