From 2b4ecb0cc7095f47fc944c54512e055c21537ab5 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Wed, 04 Apr 2012 12:33:16 +0000 Subject: add option (default) for more robust (but slower) hit detection --- (limited to 'TurtleArt/sprites.py') diff --git a/TurtleArt/sprites.py b/TurtleArt/sprites.py index fdf0105..081b456 100644 --- a/TurtleArt/sprites.py +++ b/TurtleArt/sprites.py @@ -130,12 +130,12 @@ class Sprites: if spr in self.list: self.list.remove(spr) - def find_sprite(self, pos): + def find_sprite(self, pos, region=False): ''' Search based on (x, y) position. Return the 'top/first' one. ''' list = self.list[:] list.reverse() for spr in list: - if spr.hit(pos): + if spr.hit(pos, readpixel=not region): return spr return None @@ -350,7 +350,7 @@ class Sprite: if len(self.labels) > 0: self.draw_label(cr) - def hit(self, pos): + def hit(self, pos, readpixel=False): ''' Is (x, y) on top of the sprite? ''' x, y = pos if x < self.rect.x: @@ -361,6 +361,12 @@ class Sprite: return False if y > self.rect.y + self.rect.height: return False + if readpixel: + r, g, b, a = self.get_pixel(pos) + if r == g == b == a == 0: + return False + if a == -1: + return False return self._sprites.find_in_list(self) def draw_label(self, cr): -- cgit v0.9.1