//aflylove //j2medev
联系方式 aflygame@126.com
import javax.microedition.lcdui.*;
public class Sprite {
int x,y; //不用解释X,Y坐标
/* */
public int getX() { return x; }
public int getY() { return y; }
/* */
////////////////////////////////////////////
int sequence[];//自定义序列
public void setFrameSequence(int[] seq){
sequence =new int[seq.length];
for(int i=0;i<seq.length;i++){
sequence[i]=seq[i];
} }
public void setFrame(int t){
sequence =new int[1];
sequence[0]=t;
if(sequence[0]>=framecount)
sequence[0]=0;
if(sequence[0]<0)
sequence[0]=framecount; }
public void nextFrame(){
sequence[0]=sequence[0]++;
if(sequence[0]++>=framecount)
sequence[0]=0; }
public void prevFrame(){
sequence[0]=sequence[0]--;
if(sequence[0]--<0)
sequence[0]=framecount; }
int framecount; //祯图象数量
protected int getRawFrameCount(){
return framecount;}
int count=0;
////////////////////////////
/////2大构造函数///
///////////////////////////
Image img=null;
//单图SPRITE
public Sprite(Image img) {
this.img=img; }
int n;
Image sprite;
int width,height;
//从图片获取SPRITE
public Sprite(Image img,int frameWidth,int frameHeight){
this.sprite=img;
this.width=frameWidth;
this.height=frameHeight;
int a=img.getWidth()/width;
n=a;
int b=img.getHeight()/height;
framecount=a*b; }
/////////////////////////////
/// 是否可见 ///
////////////////////////////
static boolean visible=true;//默认可见
public void setVisible(boolean visible){
this.visible=visible; }
public boolean isVisible(){
return visible; }
////////////////////////////////
/////////描绘部分/////////
////////////////////////////////
public void setPosition(int x,int y){
this.x=x;this.y=y;
}
public void paint(Graphics g){
if(visible){
if(img!=null)
g.drawImage(img,x,y,0);
else
g.setClip(x,y,width,height);//用setClip设置可视区域
if(sequence==null){ //默认正常序列
int a=count%framecount%n*width;
int b=(count%framecount/n)*height;//优先级问题必须注意
Trans(g,x-a,y-b,transform);//带有翻转的显示
//g.setClip(0,0,128,128);//这里我是机于S40还原屏幕
count++;
}else{
g.setClip(x,y,width,height);
int d=sequence.length;
int c=count%d;
g.drawImage(sprite,x-sequence[c]%n*width,y-(sequence[c]/n)*height,0);
//g.setClip(0,0,128,128);
count++;
}
} }
/////////////////////////////////////////////////////////////////////////////
///翻转出于技术考虑只写了水平翻转和垂直翻转//
/////////////////////////////////////////////////////////////////////////////
int transform=0;
public void Trans(Graphics g,int j,int k,int transform){
if(transform==0){//正常
g.setClip(x,y,width,height);
g.drawImage(sprite,j,k,0);
}
if(transform==1){//水平
for(int i=0;i<height;i++){
g.setClip(x+i,y,1,height);
g.drawImage(sprite,j-width+2*i+1,k,0);
} }
if(transform==2){//垂直
for(int i=0;i<width;i++){
g.setClip(x,y+i,width,1);
g.drawImage(sprite,j,k-height+2*i+1,0);
} } }
public void setTransform(int transform){//设置翻转1是水平2是垂直0是正常
this.transform=transform;
if(this.transform>2|this.transform<0)
this.transform=0; }
}