From 3ce7cd00032bacb036af49f3c7f453cdfd63ca31 Mon Sep 17 00:00:00 2001 From: Neil Date: Tue, 6 Sep 2016 22:26:57 +0200 Subject: [PATCH] Tweak mould rendering logic to have sane realtionship between image position and actual position --- tabakrolletjie/enemies.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tabakrolletjie/enemies.py b/tabakrolletjie/enemies.py index 7b26fed..f668f1a 100644 --- a/tabakrolletjie/enemies.py +++ b/tabakrolletjie/enemies.py @@ -31,6 +31,13 @@ class Mould(pymunk.Body): self._age = 0 self._img = None + def pygame_pos(self, surface): + """Convert to pygame coordinates and offset position so + our position is the centre of the image.""" + # The odd sign combination is because of the pymunk / pygame + # transform, but we do it this way to exploit Vec2d math magic + return pymunk.pygame_util.to_pygame(self.position + (-16, 16), surface) + def get_image(self): if not self._img: name = random.choice( @@ -88,11 +95,13 @@ class Mould(pymunk.Body): class Boyd(object): def __init__(self, gamestate, space): - seed = Mould(gamestate, space, (400, 400)) + seed = Mould(gamestate, space, (350, 350)) self._moulds = [seed] self._image = pygame.surface.Surface(SCREEN_SIZE) self._image.convert_alpha(pygame.display.get_surface()) self._image.fill((0, 0, 0, 0)) + self._image.blit(seed.get_image(), + seed.pygame_pos(self._image), None, pgl.BLEND_RGBA_ADD) def tick(self, gamestate, space): redraw = False @@ -102,9 +111,8 @@ class Boyd(object): if redraw: self._image.fill((0, 0, 0, 0)) for mould in self._moulds: - pos = pymunk.pygame_util.to_pygame(mould.position, self._image) - self._image.blit(mould.get_image(), pos, None, - pgl.BLEND_RGBA_ADD) + self._image.blit(mould.get_image(), + mould.pygame_pos(self._image), None, pgl.BLEND_RGBA_ADD) def render(self, surface): """Draw ourselves""" -- 2.34.1