本文主要是介绍java开发俄罗斯方块学习笔记 Day-5 封装,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在了解了如何将窗体素材切割成不同的几块之后,现在需要绘制完整的窗体。
一个完整的图片可以被分为9部分,根据图片在Panel上显示的左上角和右下角的坐标,以及源图片素材的切割起始点(左上角)和切割终点(右下角)坐标,可以绘制成不同的矩形窗体。
考虑到整个游戏界面有8个窗体组成,如果对每个窗体单独绘制,这样会造成大量代码重复,而且难以维护,所以我们将窗体的绘制封装成一个类Lay,绘制不同窗体时只需要在构造方法传入不同的参数,就可以完成不同窗体的绘制。
package ui;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
/**
* 绘制窗口
* @author Administrator
*
*/
public class Lay {
private static final int SIZE=7;
//新建一个图片对象,并指定以工程为根,图片在项目的相对路径
private static final Image WINDOW_IMG=new ImageIcon("Graphics/window/Window.png").getImage();
//取图片宽度
private static int WINDOW_W=WINDOW_IMG.getWidth(null);
//取图片高度
private static int WINDOW_H=WINDOW_IMG.getWidth(null);
//窗口左上角x坐标
private int x;
//窗口左上角y坐标
private int y;
//窗口宽度
private int w;
//窗口高度
private int h;
public Lay(int x,int y,int w,int h){
this.x=x;
this.y=y;
this.w=w;
this.h=h;
}
/**
* 绘制窗口
*/
public void creatWindow(Graphics g){
//(图片,图片在Panel上显示范围左上角x,左上角y,右下角x,右下角y,源图片坐标切割起始点x,切割起始点y,切割终点x,切割终点y,null)
//左上
g.drawImage(WINDOW_IMG, x, y, x+SIZE, y+SIZE, 0, 0, SIZE, SIZE, null);
//中上
g.drawImage(WINDOW_IMG, x+SIZE, y, x+w-SIZE, y+SIZE, SIZE, 0, WINDOW_W-SIZE, SIZE, null);
//右上
g.drawImage(WINDOW_IMG, x+w-SIZE, y, x+w, y+SIZE, WINDOW_W-SIZE, 0, WINDOW_W, SIZE, null);
//左中
g.drawImage(WINDOW_IMG, x, y+SIZE, x+SIZE, y+h-SIZE, 0, SIZE, SIZE, WINDOW_H-SIZE, null);
//中
g.drawImage(WINDOW_IMG, x+SIZE, y+SIZE, x+w-SIZE, y+h-SIZE, SIZE, SIZE, WINDOW_W-SIZE, WINDOW_H-SIZE, null);
//右中
g.drawImage(WINDOW_IMG, x+w-SIZE, y+SIZE, x+w, y+h-SIZE, WINDOW_W-SIZE, SIZE, WINDOW_W, WINDOW_H-SIZE, null);
//左下
g.drawImage(WINDOW_IMG, x, y+h-SIZE, x+SIZE, y+h, 0, WINDOW_H-SIZE, SIZE, WINDOW_H, null);
//中下
g.drawImage(WINDOW_IMG, x+SIZE, y+h-SIZE, x+w-SIZE, y+h, SIZE, WINDOW_H-SIZE, WINDOW_W-SIZE, WINDOW_H, null);
//右下
g.drawImage(WINDOW_IMG, x+w-SIZE, y+h-SIZE, x+w, y+h, WINDOW_W-SIZE, WINDOW_H-SIZE, WINDOW_W, WINDOW_H, null);
}
}
在绘制图形时,只需要调用createWindow方法就可以了
package ui;
import java.awt.Graphics;
import javax.swing.JPanel;
public class PanelGame extends JPanel{
private Lay lay1=new Lay(128,32,128,256);
private Lay lay2=new Lay(300,64,320,576);
public PanelGame(){
}
@Override //表示下面的方法要覆盖父类的方法
public void paintComponent(Graphics g){
lay1.creatWindow(g);
lay2.creatWindow(g);
}
}
这篇关于java开发俄罗斯方块学习笔记 Day-5 封装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!