使用java swing来模拟游戏中方格地图的效果
MainJFrame类
package com.qsuron.map;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import com.qsuron.Ribbon;
public class MainJFrame extends JFrame implements Runnable{
private static final long serialVersionUID = 5753479529328043063L;
private static final int FPS = 1000; //FPS
private static final int FRAME_X = 860; //窗口宽度
private static final int FRAME_Y = 370; //窗口高度
private static final int PIC_SIZE = 71; //地图格子大小
private long t1, t2, dt, sleepTime; //画面刷新FPS计时用
private long period = 1000 / FPS; //画面刷新FPS计时用
public Ribbon ribbon = null;
private Container contentPanel;
private BufferedImage[] bim = {null,null,null,null,null,null,null,null,null,null};
public Image offScreenImage = null; //缓冲图像
private int[][] arr = {
{0,0,7,8,8,9,0,0,0,0,0,0},
{0,0,1,2,2,3,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0},
{9,0,0,0,0,0,0,0,7,8,8,9},
{5,8,9,0,0,7,8,8,5,5,5,6},
};
private static final int PIC_X = 12;
private static final int PIC_Y = 5;
//界面初始化
private void jframeInit(){
this.setTitle("Swing 游戏学习1");
this.setSize(FRAME_X,FRAME_Y);
this.setLocation(200,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPanel = this.getContentPane();
contentPanel.setLayout(null);
this.setVisible(true);
this.gameInit();
Thread gameThread = new Thread(this);
gameThread.start();
}
//游戏初始化
private void gameInit() {
try {
for(int i=1;i<10;i++){
bim[i] = new BufferedImage(PIC_SIZE,PIC_SIZE,BufferedImage.TYPE_INT_BGR);
bim[i] = ImageIO.read(getClass().getResource(i+".png"));
}
} catch (IOException e) {e.printStackTrace();}
}
//游戏进程更新
private void gameUpdate() {
}
//游戏界面刷新
@Override
public void run() {
t1 = System.nanoTime();
while(true){
gameUpdate();
repaint();
t2 = System.nanoTime();
dt = (t2 - t1) / 1000000L;
sleepTime = period - dt;
if(sleepTime <= 0){
sleepTime = 2;
}
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {e.printStackTrace();}
t1 = System.nanoTime();
}
}
public static void main(String[] args){
MainJFrame mjf = new MainJFrame();
mjf.jframeInit();
}
@Override
public void paint(Graphics g) {
Color c = g.getColor();
for(int i=0;i<_PIC_Y;i++){
for(int j=0;j<_PIC_X;j++){
int num = arr[i][j];
//System.out.print(num+"|");
if(num==0 || bim[num]==null){
continue;
}
g.drawImage(bim[num], j*PIC_SIZE, i*PIC_SIZE, (j+1)*PIC_SIZE, (i+1)*PIC_SIZE, 0, 0, PIC_SIZE, PIC_SIZE, null);
}
//System.out.println("");
}
g.setColor(c);
}
@Override
public void update(Graphics g) {
if(offScreenImage==null){
offScreenImage = this.createImage(FRAME_X,FRAME_Y);
}
Graphics goff = offScreenImage.getGraphics();
paint(goff);
g.drawImage(offScreenImage,0,0,null);
}
}