Android游戏之文件读写类和绘图类设计

Android游戏之文件读写类和绘图类设计

E. CanvasF. PaintG. Rect

2、设计文件读写接口FileIO和文件读写类AndroidFileIOpackage com.badlogic.androidgames.framework;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public interface FileIO {public InputStream readAsset(String fileName) throws IOException;public InputStream readFile(String fileName) throws IOException;public OutputStream writeFile(String fileName) throws IOException;}

package com.badlogic.androidgames.framework.impl;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.content.res.AssetManager;import android.os.Environment;import com.badlogic.androidgames.framework.FileIO;public class AndroidFileIO implements FileIO {AssetManager assets;String externalStoragePath;public AndroidFileIO(AssetManager assets) {this.assets = assets;this.externalStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;}@Overridepublic InputStream readAsset(String fileName) throws IOException {return assets.open(fileName);}@Overridepublic InputStream readFile(String fileName) throws IOException {return new FileInputStream(externalStoragePath + fileName);}@Overridepublic OutputStream writeFile(String fileName) throws IOException {return new FileOutputStream(externalStoragePath + fileName);}}

3. 设计像素接口Pixmap,绘图接口Graphics,像素类AndroidPixmap和绘图类AndroidGraphicspackage com.badlogic.androidgames.framework;import com.badlogic.androidgames.framework.Graphics.PixmapFormat;public interface Pixmap {public int getWidth();public int getHeight();public PixmapFormat getFormat();public void dispose();}

package com.badlogic.androidgames.framework;public interface Graphics {public static enum PixmapFormat {ARGB8888, ARGB4444, RGB565}public Pixmap newPixmap(String fileName, PixmapFormat format);public void clear(int color);public void drawPixel(int x, int y, int color);public void drawLine(int x, int y, int x2, int y2, int color);public void drawRect(int x, int y, int width, int height, int color);public void drawPixmap(Pixmap pixmap, int x, int y, int srcX, int srcY,int srcWidth, int srcHeight);public void drawPixmap(Pixmap pixmap, int x, int y);public int getWidth();public int getHeight();}

package com.badlogic.androidgames.framework.impl;import android.graphics.Bitmap;import com.badlogic.androidgames.framework.Graphics.PixmapFormat;import com.badlogic.androidgames.framework.Pixmap;public class AndroidPixmap implements Pixmap {Bitmap bitmap;PixmapFormat format;public AndroidPixmap(Bitmap bitmap, PixmapFormat format) {this.bitmap = bitmap;this.format = format;}@Overridepublic int getWidth() {return bitmap.getWidth();}@Overridepublic int getHeight() {return bitmap.getHeight();}@Overridepublic PixmapFormat getFormat() {return format;}@Overridepublic void dispose() {bitmap.recycle();}}

package com.badlogic.androidgames.framework.impl;import java.io.IOException;import java.io.InputStream;import android.content.res.AssetManager;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.BitmapFactory;import android.graphics.BitmapFactory.Options;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Rect;import com.badlogic.androidgames.framework.Graphics;import com.badlogic.androidgames.framework.Pixmap;public class AndroidGraphics implements Graphics {AssetManager assets;Bitmap frameBuffer;Canvas canvas;Paint paint;Rect srcRect = new Rect();Rect dstRect = new Rect();public AndroidGraphics(AssetManager assets, Bitmap frameBuffer) {this.assets = assets;this.frameBuffer = frameBuffer;this.canvas = new Canvas(frameBuffer);this.paint = new Paint();}@Overridepublic Pixmap newPixmap(String fileName, PixmapFormat format) {Config config = null;if (format == PixmapFormat.RGB565)config = Config.RGB_565;else if (format == PixmapFormat.ARGB4444)config = Config.ARGB_4444;elseconfig = Config.ARGB_8888;Options options = new Options();options.inPreferredConfig = config;InputStream in = null;Bitmap bitmap = null;try {in = assets.open(fileName);bitmap = BitmapFactory.decodeStream(in);if (bitmap == null)throw new RuntimeException("Couldn’t load bitmap from asset ‘"+ fileName + "’");} catch (IOException e) {throw new RuntimeException("Couldn’t load bitmap from asset ‘"+ fileName + "’");} finally {if (in != null) {try {in.close();} catch (IOException e) {}}}if (bitmap.getConfig() == Config.RGB_565)format = PixmapFormat.RGB565;else if (bitmap.getConfig() == Config.ARGB_4444)format = PixmapFormat.ARGB4444;elseformat = PixmapFormat.ARGB8888;return new AndroidPixmap(bitmap, format);}@Overridepublic void clear(int color) {canvas.drawRGB((color & 0xff0000) >> 16, (color & 0xff00) >> 8,(color & 0xff));}@Overridepublic void drawPixel(int x, int y, int color) {paint.setColor(color);canvas.drawPoint(x, y, paint);}@Overridepublic void drawLine(int x, int y, int x2, int y2, int color) {paint.setColor(color);canvas.drawLine(x, y, x2, y2, paint);}@Overridepublic void drawRect(int x, int y, int width, int height, int color) {paint.setColor(color);paint.setStyle(Style.FILL);canvas.drawRect(x, y, x + width – 1, y + width – 1, paint);}@Overridepublic void drawPixmap(Pixmap pixmap, int x, int y, int srcX, int srcY,int srcWidth, int srcHeight) {srcRect.left = srcX;srcRect.top = srcY;srcRect.right = srcX + srcWidth – 1;srcRect.bottom = srcY + srcHeight – 1;dstRect.left = x;dstRect.top = y;dstRect.right = x + srcWidth – 1;dstRect.bottom = y + srcHeight – 1;canvas.drawBitmap(((AndroidPixmap) pixmap).bitmap, srcRect, dstRect,null);}@Overridepublic void drawPixmap(Pixmap pixmap, int x, int y) {canvas.drawBitmap(((AndroidPixmap)pixmap).bitmap, x, y, null);}@Overridepublic int getWidth() {return frameBuffer.getWidth();}@Overridepublic int getHeight() {return frameBuffer.getHeight();}}正确的寒暄必须在短短一句话中明显地表露出你对他的关怀。

Android游戏之文件读写类和绘图类设计

相关文章:

你感兴趣的文章:

标签云: