android平台上的sprite,tilelayer设计
Android 没有提供 javaMe 里面的 Sprite, TileLayer 等,但自己可以设计,为图形处理建立一个基本的框架,同时可以快速将 javaMe 上的应用移植到Android 平台上。这个框架依照 MIDP 中 javax.microedition.lcdui.game 包设计的Layer 类import android.graphics.Canvas;import android.graphics.Paint;public abstract class Layer {public abstract void paintCanvas canvas,Paint paint;public abstract void paintCanvas canvas,Paint paint,int x,int y;}Sprite 类import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;public class Sprite extends Layer{private int length 0;// 帧序列长度private int currentPosition 0;//当前帧序列下标private int[][] framesXY null;//各个帧序列在图片的坐标private int frameWidth 0;//帧的宽度private int frameHeight 0;//帧的高度private Bitmap bigFrames null;//大的图片private int cols 0;private int rows 0;private int PositionX 0;//精灵的X 坐标private int PositionY 0;//精灵的Y 坐标private int[] frameSequence null;//加入的帧序列private int sequencePosition 0;//加入的帧序列的显示下标public SpriteBitmap image,int frameWidth,int frameHeight{//初始化this.bigFrames image;this.frameWidth frameWidth;this.frameHeight frameHeight;framesXY initSpriteimage, frameWidth, frameHeight;this.length framesXY.length;}//初始化精灵private int[][] initSpriteBitmap bitmap,int frameWidth,int frameHeight{int imageWidth bitmap.getWidth;int imageHeight bitmap.getHeight;this.cols Math.roundimageWidth/frameWidth;//列数this.rows Math.roundimageHeight/frameHeight;//行数int[][] tempXYs new int[cols*rows][2];forint i0,k0;ilength-1{currentPosition 0;}}else{sequencePosition;ifsequencePositionframeSequence.length-1{sequencePosition 0;}currentPosition frameSequence[sequencePosition];}}//获得当前 帧序列的上一个 帧public void prevFrame{ifthis.frameSequencenull{currentPosition--;ifcurrentPosition0}//得到单 元格的宽度public int getCellWidth{return this.tileWidth;}//得到单 元格的高度public int getCellHeight{return this.tileHeight;}//得到图层 中单元格的列数public int getColumns{return this.cols;}//得到图层 中单元格的行数public int getRows{return this.rows;}//获得整 张地图的宽度public int getMapWidth{return this.cols*this.tileWidth;}//获得整 张地图的高度public int getMapHeight{return this.rows*this.tileHeight;}public void setPositionint x,int y{this.viewX x;this.viewY y;}public void paintCanvas canvas,Paint paint{forint i0;i0{Log.d“x,y“, ““i*this.tileWidth - this.viewX“,“j*this.tileHeight - this.viewY;Bitmap bitmap Bitmap.createBitmapditu,tileXY[id-1][0],tileXY[id-1][1],tileWidth,tileHeight;canvas.drawBitmapbitmap,i*this.tileWidth - this.viewX,j*this.tileHeight - this.viewY, paint;}else{}}}}public void paintCanvas canvas,Paint paint,int x,int y{this.viewX x;this.viewY y;forint i0;i0{Bitmap bitmap Bitmap.createBitmapditu,tileXY[id-1][0],tileXY[id-1][1],tileWidth,tileHeight;canvas.drawBitmapbitmap,i*this.tileWidth - this.viewX,j*this.tileHeight - this.viewY, paint;}else{}}}}}LayerManager 类import java.util.ArrayList;import android.graphics.Canvas;import android.graphics.Paint;public class LayerManager {// 定义图层 容器private ArrayList