⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 actortest.java

📁 java learn PPT java learn PPT java learn PPT java learn PPT
💻 JAVA
字号:
     import java.awt.*;
     import java.awt.event.*;
     import java.awt.image.*;
     import java.awt.geom.*;
     import java.util.*;

     // 控制Robot对象的适配器类
     class RobotAdapter extends KeyAdapter
     {
          private Robot robot;

          public RobotAdapter(Robot r)
          {
               robot = r;
          }

          // 让机器人开火或者移动
          public void keyPressed(KeyEvent e)
          {
               robot.resetState(Robot.SHOOTING);

               switch(e.getKeyCode())
               {
                    case KeyEvent.VK_SPACE:
                         robot.startShooting();
                         break;

                    case KeyEvent.VK_UP:
                         robot.move(Robot.DIR_NORTH);
                         break;

                    case KeyEvent.VK_DOWN:
                         robot.move(Robot.DIR_SOUTH);
                         break;

                    case KeyEvent.VK_LEFT:
                         robot.move(Robot.DIR_WEST);
                         break;

                    case KeyEvent.VK_RIGHT:
                         robot.move(Robot.DIR_EAST);
                         break;

                    default:
                         break;
               } 
          }

          // 如果空格键松开,则让机器人停止射击
          public void keyReleased(KeyEvent e) 
          {
               if(e.getKeyCode() == KeyEvent.VK_SPACE)
               {
                    robot.stopShooting();
               }
          }
     }    // RobotAdapter


     public class ActorTest extends Frame implements Runnable
     {
          // 动画线程
          private Thread animation;

          // 屏外绘制缓冲
          private BufferedGraphics offscreen;
 
          // 绘制平铺背景的Paint
          Paint paint;

          // 填充背景的几何形状
          private Rectangle2D floor;

          // 可以移动的机器人
          private Robot robot;

          public void init()
          {               
               // 创建RobotGroup
               RobotGroup group = new RobotGroup();
               group.init(this);
     
               // 设置Robot的边界为窗体边界
               group.MIN_X_POS = 0;
               group.MIN_Y_POS = 0;

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

               // 在屏幕中间创建机器人
               robot = new Robot(group);

               robot.setPos((getSize().width  - robot.getWidth()) /2,
                            (getSize().height - robot.getHeight())/2);

               // 注册一个新的RobotAdapter来接收Robot移动指令
               addKeyListener(new RobotAdapter(robot));

               // 创建背景Paint
               createPaint();

               offscreen = new BufferedGraphics(this);

               AnimationStrip.observer = this;

               animation = new Thread(this);
          }    // init

          // 创建一个平铺背景Paint
          private void createPaint()
          {
          	   MediaTracker mt = new MediaTracker(this);
               Image image = getToolkit().getImage("stile.gif");
               mt.addImage(image,0);
               try{
               	mt.waitForAll();
               }
               catch(Exception e){}
               while(image.getWidth(this) <= 0);

               // 用image的宽和高创建一个新的BufferedImage
               BufferedImage bi = new BufferedImage(
                        image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_RGB);

               // 得到BufferedImage的Graphics2D容器并绘制原始图像
               ((Graphics2D)bi.getGraphics()).drawImage(image, new AffineTransform(), this);

               // 以图像的大小创建参照矩形
               floor = new Rectangle2D.Double(0, 0, getSize().width, getSize().height);

               // 设置paint
               paint = new TexturePaint(bi, new Rectangle(0, 0, image.getWidth(this), image.getHeight(this)));

          }   

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

          public void stop() 
          {
              animation = null;
          }

          public void run() 
          {
               Thread t = Thread.currentThread();
	       while (t == animation)
               {
                    try
                    {     
                         Thread.sleep(10);
                    }
                    catch(InterruptedException e) 
                    {
                         break;
                    }
                    repaint();
                }              
           }   // run

           public void update(Graphics g)
           {
                robot.update();

                paint(g);
           }
 
           public void paint(Graphics g) 
           {
               Graphics2D bg = (Graphics2D)offscreen.getValidGraphics();

               // 设置paint并填充背景
               bg.setPaint(paint);
               bg.fill(floor);

               // 绘制机器人
               robot.paint(bg);
                
               
               // 在窗体上绘制屏外图像
               g.drawImage(offscreen.getBuffer(), 0, 0, this);
           }
            // paint
          public static void main(String[] args){
          	ActorTest vt = new ActorTest();
          	vt.init();
          	vt.start();
          	vt.setSize(640,480);
          	vt.setVisible(true);
          }

     }     // ActorTest 

⌨️ 快捷键说明

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