treetest.java

来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 142 行

JAVA
142
字号
     import java.applet.*;
     import java.awt.*;
     import java.awt.image.*;
     import java.awt.geom.*;
     import java.util.*;

     public class TreeTest extends Applet implements Runnable
     {
          // 动画线程
          private Thread animation;

          private VolatileImage offscreen;    

          private TreeScene scene;

          private final long framerate = 1000/40;  // 40 fps

          public void init()
          {               
               AsteroidGroup group = new AsteroidGroup();
               group.init(this);

               group.MIN_X_POS = 0;
               group.MIN_Y_POS = 0;

               group.MAX_X_POS = getSize().width;
               group.MAX_Y_POS = getSize().height;

               scene = new TreeScene(getBounds());    

               Random random = new Random();
               for(int i = 0; i < 5; i++)
               {
                    Asteroid ast = new Asteroid(group);
                    ast.setPos(100, 100);//Math.abs(random.nextInt(getSize().width)), 
                               //Math.abs(random.nextInt(getSize().height)));
                    scene.add(ast);
               }

               offscreen = createVolatileImage(getSize().width, getSize().height);

               animation = new Thread(this);

          }   // init


          public void start()
          {
              //启动动画线程
              animation.start();
          }

          public void stop() 
          {
              animation = null;
          }

          public void run() 
          {
               long lastTime;
               long elapsedTime;

               Thread t = Thread.currentThread();
	       while (t == animation)
               {
                    lastTime = System.currentTimeMillis();                    
                                      
                    repaint();

                    elapsedTime = System.currentTimeMillis() - lastTime;
                    
                    try
                    {
                         if(elapsedTime < framerate)
                         {
                              Thread.sleep(framerate - elapsedTime);  
                         }

                         else
                         {
                              // 不要让垃圾收集器饿着
                              Thread.sleep(5);
                         }
                    }

                    catch(InterruptedException e) 
                    {    
                         break;
                    }
               }              

          }   // run

          public void update(Graphics g)
          {
               scene.update();
          
               paint(g);
          }

          void paintScene() 
          {
                do
                {
                     if (offscreen.validate(getGraphicsConfiguration()) ==
                          VolatileImage.IMAGE_INCOMPATIBLE)
                     {
                          offscreen = createVolatileImage(getSize().width, getSize().height);
                     }

                     Graphics2D g2d = offscreen.createGraphics();

                     g2d.setPaint(Color.WHITE);
                     g2d.fill(new Rectangle2D.Double(0, 0, getSize().width, getSize().height));

                     scene.paint(g2d);
                     g2d.dispose();

                }    while (offscreen.contentsLost());
          }
 
          public void paint(Graphics g) 
          {
               do 
               {
                    // 如果屏外图像无效的话恢复它
                    if(offscreen.validate(getGraphicsConfiguration()) == VolatileImage.IMAGE_INCOMPATIBLE)
                    {
                         offscreen = createVolatileImage(getSize().width, getSize().height);
                    }

                    // 绘制场景
                    paintScene();
     
                    // 如果内容丢失则循环
               }    while(offscreen.contentsLost());

               g.drawImage(offscreen, 0, 0, this);

          }    // paint

     }    // TreeTest 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?