home *** CD-ROM | disk | FTP | other *** search
/ Java 1.2 How-To / JavaHowTo.iso / 3rdParty / Gamelication / examples / Boink / com / next / gt / backup / DisplayManager.backup < prev    next >
Encoding:
Text File  |  1998-04-06  |  2.9 KB  |  121 lines

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