009 牌视图实现

    今天一大早,心情不错,就打算将牌视图的实现简单说一下。java

    首先,咱们先看下素材是如何的,以下图所示:
工具

        素材一开始是本人通过ps设计出来,而后再切成一个个小件,经过一个叫作TexturePackerGUI的软件生成的一张整合图片,配带着一个说明各小图片位置大小的文本文件,文本文件内容格式以下:this

                                                10_b.png:29:370:25:30编码

10_b.png为图片名称,29:370分别是为表明位置的x,y,25:30为图片宽高大小。url

为此我写了一个解析这两个文件的工具类,代码以下:spa

/**
 * <p>Title: AssetManager.java</p>
 * <p>Description: 素材管理,实现了单例</p>
 * <p>Copyright: Copyright (c) 2007</p>
 * @author Tunie 
 * @date 2014年9月18日
 * @version 1.0
 */
public class AssertManager {
	
	private List<BufferedImage> images;
	private Map<String, Asset> asserts;
	
	private AssertManager() {
		images = new ArrayList<BufferedImage>();
		asserts = new HashMap<String, AssertManager.Asset>();
	}
	
	/**
	 * 读取文件
	 * @param imagePath 图片文件路径
	 * @param imageDescPath 图片描述文件路径
	 */
	public void readFile(String imagePath , String imageDescPath) {
		BufferedImage image = null;
		try {
			URL url = AssertManager.class.getClassLoader().getResource(
					imagePath);
			image = ImageIO.read(url);
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("读取图片出错");
			return;
		}
		images.add(image);
		try {
			String encoding = "GBK";
			URL url = AssertManager.class.getClassLoader().getResource(
					imageDescPath);
			File file = new File(url.getPath());
			Asset asset = null;
			if (file.isFile() && file.exists()) { // 判断文件是否存在
				InputStreamReader read = new InputStreamReader(
						new FileInputStream(file), encoding);// 考虑到编码格式
				BufferedReader bufferedReader = new BufferedReader(read);
				String lineTxt = null;
				while ((lineTxt = bufferedReader.readLine()) != null) {
					System.out.println(lineTxt);
					asset = new Asset(lineTxt, image);
					asserts.put(asset.getName(), asset);
				}
				read.close();
			} else {
				System.out.println("找不到指定的文件");
			}
		} catch (Exception e) {
			System.out.println("读取文件内容出错");
			e.printStackTrace();
		}
	}

	public void clear() {
		asserts.clear();
		images.clear();
	}
	
	public BufferedImage getImage(String name) {
		Asset asset = asserts.get(name);
		if (asset != null)
			return asset.getImage();
		return null;
	}
	
	public static void loadFile(String imagePath , String imageDescPath) {
		getInstance().readFile(imagePath, imageDescPath);
	}
	
	public static BufferedImage getAssert(String name) {
		return getInstance().getImage(name);
	}
	
	private static AssertManager instance;
	public static synchronized AssertManager getInstance() {
		if (instance == null)
			instance = new AssertManager();
		return instance;
	}
	
	/**
	* <p>Title: Asset</p>
	* <p>Description:素材,主要为图片 </p>
	* @author Tunie
	* @date 2014年9月18日
	*/
	private class Asset {
		
		private BufferedImage parentImage;
		
		private String name;
		private int x;
		private int y;
		private int width;
		private int height;
		
		public Asset(String descInfo , BufferedImage parentImage) {
			analyse(descInfo);
			this.parentImage = parentImage;
		}
		public BufferedImage getImage() {
			return parentImage.getSubimage(x, y, width, height);
		}
		private void analyse(String descInfo) {
			String[] descs = descInfo.split(":");
			name = descs[0];
			x = new Integer(descs[1]);
			y = new Integer(descs[2]);
			width = new Integer(descs[3]);
			height = new Integer(descs[4]);
		}
		public String getName() {
			return name;
		}
	}
}

实现很简单,没什么值得说明的地方。设计

相关文章
相关标签/搜索