approximate circles by polygons in pymunk
authoradrianna <adrianna.pinska@gmail.com>
Sat, 10 Sep 2016 12:19:50 +0000 (14:19 +0200)
committeradrianna <adrianna.pinska@gmail.com>
Sat, 10 Sep 2016 12:20:07 +0000 (14:20 +0200)
tabakrolletjie/obstacles.py

index 9adb80308180f40a76accc528492d7fe9026c35c..7096424192dffe357beff096379fcec1f4ca6971 100644 (file)
@@ -6,6 +6,7 @@ import pymunk
 import pymunk.pygame_util
 import pygame.draw
 import pygame.surface
+from pygame.math import Vector2
 
 from .constants import (SCREEN_SIZE, OBSTACLE_CATEGORY)
 from .loader import loader
@@ -85,8 +86,14 @@ class Shrub(BaseObstacle):
 
     def __init__(self, shrublets):
         super(Shrub, self).__init__()
-        for [x, y, r] in shrublets:
-            self.shapes.append(pymunk.Circle(self.body, r, offset=(x, y)))
+        for (x, y, r) in shrublets:
+            vec = Vector2(0, int(r))
+            STEPS = 18
+            vertices = [vec.rotate(angle) + (x, y) for angle in range(0, 360, 360/STEPS)]
+            vertices = [(v.x, v.y) for v in vertices]
+
+            self.shapes.append(pymunk.Poly(self.body, vertices))
+        self.shrublets = shrublets
         self._image = None
 
     def get_image(self):
@@ -94,10 +101,10 @@ class Shrub(BaseObstacle):
             self._image = pygame.surface.Surface(SCREEN_SIZE).convert_alpha()
             self._image.fill((0,0,0,0))
                 
-            for shape in self.shapes:
-                centre = pymunk.pygame_util.to_pygame(shape.offset, self._image)
-                pygame.draw.circle(self._image, (255, 255, 255), centre, int(shape.radius))
-                
+            for (x, y, r) in self.shrublets:
+                centre = pymunk.pygame_util.to_pygame((x, y), self._image)
+                pygame.draw.circle(self._image, (255, 255, 255), centre, r)
+
             shrub_texture = loader.load_image("textures", "shrub.png").convert_alpha()
             self._image.blit(shrub_texture, (0, 0), None, pgl.BLEND_RGBA_MULT)