nodezloader.java

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

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

     import magic.actor2d.*;
     import magic.awtex.*;
     import magic.debug.*;
     import magic.gamelet.*;
     import magic.graphics.*;
     import magic.scene.*;
     import magic.util.*;

     public class NodezLoader implements Runnable
     {
          private BufferedImage offscreen;
          private Rectangle2D bounds;
          private Label2D loading;
          private Graphics2D g2d;
          private Thread animation;
          private final long MIN_TIME = 5000;
          private boolean finished;
          private Node[] nodes;
          private final int NUM_NODES = 8;
          private final double RADIUS = 125;

          public NodezLoader(Rectangle2D r, NodeGroup grp, Graphics2D g)
          {
               bounds = r;
               g2d = g;   

               offscreen = new BufferedImage((int)r.getWidth(), (int)r.getHeight(), BufferedImage.TYPE_INT_RGB);

               finished = false;

               double anchorX = bounds.getWidth()/2;
               double anchorY = bounds.getHeight()/2;

               nodes = new Node[NUM_NODES];
               for(int i = 0; i < NUM_NODES; i++)
               {
                    nodes[i] = new Node(grp, i, new Vector2D.Double(
                                anchorX + (RADIUS * MagicUtils.cos(i*(360/NUM_NODES))), 
                                anchorY + (RADIUS * MagicUtils.sin(i*(360/NUM_NODES)))));
               }

               loading = new Label2D(new Font("Helvetica", Font.PLAIN, 30), "loading...", Color.GREEN.brighter());
               loading.centerOn(bounds, g);
          }

          public boolean isFinished()
          {
               return finished;
          }

          public void start()
          {
               animation = new Thread(this);
               animation.start();
          }

          public void stop()
          {
               animation = null;
          }

          public void run()
          {
               long startTime = System.currentTimeMillis();

               Thread t = Thread.currentThread();
               while(t == animation)
               {
                    paint();
                    
                    try
                    {
                         Thread.sleep(100);
                    }
                    catch(InterruptedException e)
                    {
                         break;
                    }

                    if(System.currentTimeMillis() - startTime > 9*MIN_TIME/10)
                    {
                         loading.setPaint(Color.RED);
                    }

                    if(System.currentTimeMillis() - startTime > MIN_TIME)
                    {
                         finished = true;
                    }
               }
          }

          public void paint()
          {
               Graphics2D g = offscreen.createGraphics();        
               g.setPaint(Color.BLACK);
               g.fill(bounds);

               for(int i = 0; i < NUM_NODES; i++)
               {
                    nodes[i].update();
                    nodes[i].paint(g); 
               }

               int prev = nodes[NUM_NODES-1].getAnimIndex();
               int temp;
               for(int i = 0; i < NUM_NODES; i++)
               {
                    temp = nodes[i].getAnimIndex();
                    nodes[i].setAnimIndex(prev);
                    prev = temp;
               }

               loading.paint(g);

               g2d.drawImage(offscreen, 0, 0, AnimationStrip.observer);
          }

     }     // NodezLoader

⌨️ 快捷键说明

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