现在的位置: 首页 > 综合 > 正文

Sprite

2013年08月02日 ⁄ 综合 ⁄ 共 4131字 ⁄ 字号 评论关闭

//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;           }
        }

 

抱歉!评论已关闭.