使用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); } }
Comments NOTHING