android平台上的sprite,tilelayer设计,Android平台上的SpriteTileLayer设计

这篇博客介绍了如何在Android平台上设计一个基于Layer、Sprite的图形处理框架,以便快速移植从JavaME应用。Layer类作为基础抽象类,Sprite类扩展了Layer并实现了帧序列处理,支持精灵动画。通过解析大图,拆分成多个帧,并能控制精灵的位置和帧切换,为Android游戏开发提供了便利。

41528d3028836879cd698677c3999917.gifAndroid平台上的SpriteTileLayer设计

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 paint(Canvas canvas,Paint paint); public abstract void paint(Canvas 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 Sprite(Bitmap image,int frameWidth,int frameHeight) { //初始化 this.bigFrames = image; this.frameWidth = frameWidth; this.frameHeight = frameHeight; framesXY = initSprite(image, frameWidth, frameHeight); this.length = framesXY.length; } //初始化精灵 private int[][] initSprite(Bitmap bitmap,int frameWidth,int frameHeight) { int imageWidth = bitmap.getWidth(); int imageHeight = bitmap.getHeight(); this.cols = Math.round(imageWidth/frameWidth);//列数 this.rows = Math.round(imageHeight/frameHeight);//行数 int[][] tempXYs = new int[cols*rows][2]; for(int i=0,k=0;iframeSequence.length-1) { sequencePosition = 0; } currentPosition = frameSequence[sequencePosition]; } } //获得当前帧序列的上一个帧 public void prevFrame() { if(this.frameSequence==null) { currentPosition--; if(currentPosition<0) { currentPosition = length-1; } }else { sequencePosition--; if(sequencePosition=0 } } //设置位置 public void setPosition(int positionX,int positionY)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值