Référence MIME
La classe de formes Polygone en Pymunk représente une forme polygonale. Elle peut être utilisée pour créer des objets tels que des murs, des sols, des obstacles et des objets de jeu.
La classe de formes Polygone en Pymunk représente une forme polygonale. Elle peut être utilisée pour créer des objets tels que des murs, des sols, des obstacles et des objets de jeu.
La classe Polygone est définie dans le module pymunk.shapes. Elle hérite de la classe Shape, qui représente une forme physique en général.
Exemple : Copier le code
from pymunk import Body, Poly, Space space = Space() # Créer un corps body = Body(mass=1, moment=1) # Créer un polygone, ici il s’agit d'un carré sommets = [(10, 10), (50, 10), (50, 50), (10, 50)] polygon = Poly(body, sommets, radius=1) # Attacher la forme au corps space.add(body, polygon)
from pymunk import Body, Poly, Space
space = Space()
body = Body(mass=1, moment=1)
sommets = [((10, 10), (50, 10), (50, 50), (10, 50)]
polygon = Poly(body, sommets, radius=1)
space.add(body, polygon)
Le code global crée un espace Pymunk, un corps Pymunk, un polygone à quatre sommets (un carré), attache le polygone au corps, puis ajoute le corps et la forme polygonale à l'espace pour permettre la simulation physique du carré.
Pour l'affichage du résultat du code précédent, vous pouvez utiliser Pygame ou toute autre bibliothèque graphique de votre choix.
Exemple : Copier le code
import pygame from pygame.locals import * from pymunk.pygame_util import DrawOptions # Initialisation de Pygame pygame.init() # Dimensions de la fenêtre window_width = 400 window_height = 200 # Création de la fenêtre Pygame screen = pygame.display.set_mode((window_width, window_height)) pygame.display.set_caption("Affichage Pymunk avec Pygame") # Options d'affichage pour Pymunk draw_options = DrawOptions(screen) # Boucle principale running = True while running: for event in pygame.event.get(): if event.type == QUIT: running = False # Efface l'écran screen.fill((255, 255, 255)) # Affiche le polygone avec les options Pymunk space.debug_draw(draw_options) # Mise à jour de l'affichage pygame.display.flip() # Met à jour l'espace Pymunk space.step(1 / 60.0) # Ajustez cette valeur selon la fréquence de rafraîchissement souhaitée # Quitte Pygame pygame.quit()
Comme nous l'avons toujour fait dans les chapitres précédents, nous allons utiliser les classes que nous metons dans le fichier 'classeForme.py'
Nous allons donc ajouter dans le fichier 'classeForme.py' une classe polygon dont voici le code:
Exemple : Copier le code
class Polygon: def __init__(self, pos, sommets): self.body = pymunk.Body(1, 100) self.body.position = pos shape = pymunk.Poly(self.body, sommets) shape.density = 0.1 shape.elasticity = 1 space.add(self.body, shape)
On va ajouter aussi une classe rectangle dont le code est le suivant:
Exemple : Copier le code
class Rectangle: def __init__(self, pos, size=(80, 50)): self.body = pymunk.Body() self.body.position = pos shape = pymunk.Poly.create_box(self.body, size) shape.density = 0.1 shape.elasticity = 1 shape.friction = 1 space.add(self.body, shape)
Télécharger le fichier classeForme.py
Maintenant pour utiliser les classes du fichier 'classeForme.py' il suffit d'importer les classes voulues à partir de ce fichier comme le montre le code suivant
Exemple : Copier le code
from classeForme import pymunk, space, App, Box, Polygon Box() sommets = [(10, 10), (50, 10), (50, 50), (10, 50)] Polygon((100, 150), sommets ) App().run()
Explication du code:
from classeForme import pymunk, space, App, Box, Polygon
Cette ligne importe plusieurs classes et objets du module classeForme pour être utilisés dans le code principal.
Box()
Crée une instance de la classe Box du module classeForme, ce qui signifie qu'un mur (rectangle statique) est créé.
sommets = [(10, 10), (50, 10), (50, 50), (10, 50)] Polygon((100, 150), sommets)
Ces lignes créent un polygone en utilisant la classe Polygon du module classeForme. Le polygone est défini par une liste de sommets sommets. Les sommets spécifient les coordonnées (x, y) des coins du polygone. Le polygone est créé avec un centre en (100, 150) et les sommets spécifiés.
App().run()
Cela crée une instance de la classe App du module classeForme et exécute la méthode run. Cette méthode initialise une fenêtre Pygame, gère les événements, affiche la simulation physique, et exécute la boucle principale de la simulation jusqu'à ce que l'utilisateur ferme la fenêtre.
En résumé, le code crée une simulation physique simple avec une boîte statique (mur) et un polygone en utilisant Pymunk et Pygame. La classe App gère la simulation et l'interface utilisateur, tandis que les classes Box et Polygon définissent les objets physiques à simuler.
Le code suivant crée un triangle mobile
Exemple : Copier le code
from classeForme import pymunk, space, App, Box, Polygon Box() sommets = [(100, 10), (150, 110), (80, 150)] Polygon((100, 50), sommets ) App().run()
Le code fourni ici est très similaire à celui que nous avons présenté précédemment, mais cette fois, il crée un triangle mobile au lieu d'un carré. Voici une explication du code :
En résumé, ce code crée une simulation physique avec un mur statique (boîte) et un triangle mobile en utilisant la bibliothèque Pymunk pour la simulation physique et Pygame pour l'interface utilisateur. Le triangle mobile réagira aux forces et aux collisions, ce qui lui permettra de bouger dans la simulation.
Le code crée une simulation d'une bande transporteuse avec deux segments ayant des vitesses de surface opposées. Un rectangle mobile est placé sur la bande, et sa dynamique est influencée par la friction et la vitesse de surface de la bande transporteuse. La simulation permet de visualiser comment les objets réagissent à ces paramètres physiques.
Exemple : Copier le code
from classeForme import pymunk, space, App, Rectangle space.gravity = (0, 1000) # Exemple de gravité b0 = space.static_body shape = pymunk.Segment(b0, (20, 70), (500, 70), 10) shape1 = pymunk.Segment(b0, (10, 120), (650, 100), 10) shape.friction = 1000 shape1.friction = 1000 shape.surface_velocity = (10, 10) shape1.surface_velocity = (-10, 10) space.add(shape, shape1) Rectangle((50, 20), (80, 10)) App().run()
Voici une explication du code :
Le code crée une simulation où un cercle est connecté à un point d'ancrage par une articulation pivotante, permettant ainsi au cercle de tourner autour du point d'ancrage en réponse à la simulation de la physique.
Exemple : Copier le code
# articulation pivotante from classeForme import pymunk, space, App, Box Box() b0 = space.static_body body = pymunk.Body(mass=1, moment=10) body.position = (100, 200) cercle = pymunk.Circle(body, radius=25) joint = pymunk.PivotJoint(b0, body, (200, 150)) space.add(body, cercle, joint) App().run()
Le code crée une simulation où un cercle est attaché à un point d'ancrage par un ressort amorti. Le ressort essaie de maintenir sa longueur de repos, ce qui entraîne des oscillations du cercle autour du point d'ancrage en réponse à la simulation de la physique.
Exemple : Copier le code
# articulation pivotante from classeForme import pymunk, space, App, Box, Rectangle b0 = space.static_body p0 = 100, 200 body = pymunk.Body(mass=1, moment=10) body.position = (100, 50) circle = pymunk.Circle(body, radius=30) joint = pymunk.DampedSpring(b0, body, p0, (0, 0), 100, 100, 0) space.add(body, circle, joint) App().run()
Cette fois-ci, au lieu d'une articulation pivotante simple, un "Damped Spring" (ressort amorti) est utilisé comme articulation. Il est créé avec les paramètres suivants :