Implémentation plus propre avec une sous-classe de Sprite.
authorpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Fri, 1 Mar 2013 12:29:37 +0000 (12:29 +0000)
committerpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Fri, 1 Mar 2013 12:29:37 +0000 (12:29 +0000)
git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@417 fe552daf-6dbe-4428-90eb-1537e0879342

src/kinect/pygamedisplay.py
src/minwii/widgets/playingscreen.py

index 82621ea..fbf0b77 100755 (executable)
@@ -38,6 +38,24 @@ class RGB :
         return self.context.wait_one_update_all(self.imgGene)
 
 
+class RGBSprite(pygame.sprite.DirtySprite, RGB) :
+    
+    def __init__(self, alpha=255) :
+        pygame.sprite.DirtySprite.__init__(self)
+        self.dirty = 2 # toujours dirty !
+        RGB.__init__(self)
+
+        self.image = pygame.Surface((640, 480))
+        self._regular = pygame.Surface((640, 480))
+        self.image.set_alpha(alpha)
+        self.rect = pygame.Rect((0, 0), (0, 0))
+    
+    def update(self) :
+        RGB.update(self)
+        img = self.capture()
+        self._regular.blit(img, (0, 0))
+        self.image.blit(pygame.transform.flip(self._regular, True, False), (0, 0))
+
     
 def main() :
     pygame.init()
index 5829a4e..f6038fd 100755 (executable)
@@ -45,11 +45,11 @@ class PlayingScreenBase(pygame.sprite.LayeredDirty, EventHandlerMixin) :
         self.columns = {}
         self._initColumns()
         self._running = False
-        self.draw(pygame.display.get_surface())
+        self.kinectRgb = kinect.RGBSprite(alpha=128)
+        self.add(self.kinectRgb, layer=CURSOR_LAYER)
         self._initCursor()
+        self.draw(pygame.display.get_surface())
         
-        self.kinectRgb = kinect.RGB()
-        self.kinectRgbSur = pygame.Surface((640, 480))
     
     def _initRects(self) :
         """ création des espaces réservés pour
@@ -99,16 +99,9 @@ class PlayingScreenBase(pygame.sprite.LayeredDirty, EventHandlerMixin) :
         pygame.mouse.set_visible(False)
         while self._running :
             EventDispatcher.dispatchEvents()
+            self.kinectRgb.update()
             dirty = self.draw(pygame.display.get_surface())
             pygame.display.update(dirty)
-            
-            self.kinectRgb.update()
-            rgbImg = self.kinectRgb.capture()
-            self.kinectRgbSur.blit(rgbImg, (0, 0))
-            screen = pygame.display.get_surface()
-            screen.blit(pygame.transform.flip(self.kinectRgbSur, True, False), (0, 0))
-            pygame.display.flip()
-            
             clock.tick(FRAMERATE)
     
     def stop(self) :