home *** CD-ROM | disk | FTP | other *** search
/ The Net: Ultimate Internet Guide / WWLCD1.ISO / pc / java / de86gnzn / examples / boink / com / next / gt / displaymanager.java < prev    next >
Encoding:
Java Source  |  1996-08-14  |  2.9 KB  |  121 lines

  1.  
  2. /**
  3.  *
  4.  * DisplayManager.java
  5.  * @author    Mark G. Tacchi (mtacchi@next.com) 
  6.  * @version    0.8
  7.  * Mar 28/1996
  8.  *
  9.  * DisplayManager provides optimized screen display. Images are drawn to
  10.  * an offscreen buffer and blitted out to the display.  If images are close
  11.  * to one another, they are coalesced and blitted as a single image.
  12.  *
  13.  * A read only cache is kept which represents an untainted background image.
  14.  * This is used in the optimization algorithm as a source for a clean
  15.  * background.
  16.  *
  17.  */
  18.  
  19. package com.next.gt;
  20.  
  21. import java.awt.Rectangle;
  22. import java.awt.Graphics;
  23. import java.awt.Image;
  24. import java.awt.MediaTracker;
  25.  
  26. public class DisplayManager extends java.lang.Object  {
  27.   private Image            background;
  28.   private Image         offScreenBuffer;
  29.   private DirtyRectSet    dirtyRects= new DirtyRectSet();
  30.   
  31.   /**
  32.   *  A reference back to the gamelet this manager is servicing.
  33.   */
  34.   protected Gamelet owner;
  35.   
  36.   
  37. public DisplayManager(Gamelet theOwner) {
  38.   owner= theOwner;
  39. } /*DisplayManager()*/
  40.  
  41.  
  42.  
  43. /**
  44.  * Refresh screen.
  45.  */
  46. public void refresh ()
  47. {
  48.   dirtyRects.addRect (new Rectangle (0, 0, owner.size().width, owner.size().height));
  49. } /*setBackground*/
  50.  
  51.  
  52.  
  53. /**
  54.  * Set the background image to the specified image.
  55.  */
  56. public void setBackground (Image theImage)
  57. {
  58.   MediaTracker    tracker= new java.awt.MediaTracker(owner);
  59.  
  60.   tracker.addImage(theImage, 0);
  61.   try
  62. {
  63.     tracker.waitForID(0);
  64.   } catch (InterruptedException e) {
  65.   }
  66.  
  67.   background= theImage;
  68.   offScreenBuffer= owner.createImage (owner.size().width, owner.size().height);
  69.   offScreenBuffer.getGraphics().drawImage (theImage, 0, 0, owner);
  70.  
  71.   dirtyRects.addRect (new Rectangle (0, 0, owner.size().width, owner.size().height));
  72.   
  73. }
  74. /*setBackground*/
  75.  
  76.  
  77.  
  78. /**
  79.  * Tile the background with the specifed tile image.
  80.  */
  81. public void setBackgroundTile (Image theImage)
  82. {
  83.   MediaTracker    tracker= new java.awt.MediaTracker(owner);
  84.  
  85.   tracker.addImage(theImage, 0);
  86.   try
  87. {
  88.     tracker.waitForID(0);
  89.   } catch (InterruptedException e) {}
  90.  
  91.   setBackground(TiledImage.createTiledImage(theImage, owner.size().width, owner.size().height, owner));
  92.   
  93. }
  94. /*setBackgroundTile*/
  95.  
  96.  
  97.   
  98. /**
  99.  * Display changed portions of screen.
  100.  */
  101. public void paint(Graphics g) {
  102.   DirtyRectSet flushRects;
  103.   Graphics osb= offScreenBuffer.getGraphics ();
  104.   
  105.   //
  106.   // clear background behind actors...
  107.   //
  108.   dirtyRects.drawImage (osb, background, owner);
  109.  
  110.   flushRects= dirtyRects;
  111.   dirtyRects= new DirtyRectSet(owner.actorManager.actors.size ());
  112.  
  113.   //
  114.   // draw actors
  115.   //
  116.   for (int j= 0; j< owner.actorManager.actors.size (); j++) {
  117.     Actor anActor= (Actor)owner.actorManager.actors.elementAt(j);
  118.     Rectangle r= new Rectangle ((int)anActor.x, (int)anActor.y, anActor.width, anActor.height);
  119.     dirtyRects.addRect (r);
  120.     flushRects.addRect (r);
  121.     anActor.draw (osb);
  122.   }
  123. /*next_j*/
  124.  
  125.   flushRects.drawImage (g, offScreenBuffer, owner);
  126.   
  127. } /*paint*/
  128.  
  129.  
  130. } /*DisplayManager*/