在游戏中我们需要使用窗体,由于我们不仅仅在此游戏中使用窗体,所有我们实现自己的窗体,为后续其他项目省了不少时间。
实现MyFrame类:
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import GameTools.Constant;
public class MyFrame extends Frame{
private static final long serialVersionUID = 2017618L;
public void launchFrame() {//加载窗体
setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);//设置大小
setLocation(0,0);//设置位置
setVisible(true);//设置窗体可见
new PaintTread().start();//启动重画线程
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);//关闭窗口
}
});
}
//使图片动起来,定义一个重画窗口的线程类
class PaintTread extends Thread{
public void run() {
while(true){
repaint();
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}//使CPU歇会
}
}
}
private Image offScreenImage = null;//利用双缓冲技术消除屏幕闪烁
public void update(Graphics g){
if(offScreenImage == null){
offScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
}
Graphics gOff = offScreenImage.getGraphics();
paint(gOff);
g.drawImage(offScreenImage, 0, 0, null);
}
}
在项目中有许多地方使用常量,为防止后续的修改我们将这些常量放在一个Constant类中,项目中使用常量直接调用该类的变量即可。
实现Constant类:
public class Constant {
public static final int GAME_WIDTH=1366;
public static final int GAME_HEIGHT=768;
}
在项目中我们总是需要导入图片,在此创建一个类专门用于导入图片。
实现GameImage类:
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
//工具类:用于画图
public class GameImage {
private GameImage() {};//工具类一般设置为私有
public static Image getImage(String path) {
URL u = GameImage.class.getClassLoader().getResource(path);
BufferedImage img = null;
try {
img = ImageIO.read(u);
} catch (IOException e) {
e.printStackTrace();
}
return img;
}
}