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
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,
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).
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)
Partager