【Java开源代码栏目提醒】:网学会员,鉴于大家对Java开源代码十分关注,论文会员在此为大家搜集整理了“ActorTest.java”一文,供大家参考学习!
import java.applet.*;
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 Applet 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()
{
Image image = getImage(getDocumentBase(), "stile.gif");
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
} // ActorTest