Mysprite 2.0

Source: Internet
Author: User
Tags abs final

/**

An upgraded version of the Sprite class written for MIDP1.0  * <p>title: Wizard class </p> * * <p>description: </p> *  * <p>copyright:copyright (c) 2004</p> * * <p>company: </p> * * @ Author not attributable * @version 1.0 */import javax.microedition.lcdui.*;p ublic class Mysprite {  Final public static int bycollidexy = 0;  final public static int bycollidearea = 1;  final public static int Bycollideradius = 2;  public Image image;  public int positionx;  public int positiony;  public int n umframes;  public int currentframe;  public int[][] framesinfo;//This version the dimensions of each frame are stored in an array, not like 1.0 medium   public Boolean visible=true;  public int dx;  public int dy;  public int collidex=0;// When two roles cross transverse distances are considered to have collided   public int collidey=0;//when two roles cross longitudinal distances over Collidey think already collide   public int Collidearea Collidex =0;//when two characters invade each other's area more than Collidearea think already collide (note: Here's the invasion area!= Cross area)   public int collideradius=0//Collision RADIUS   public int state=0;

  Public Mysprite (Image image,int numframes) throws Exception {    this.image = image;  & nbsp This.numframes = numframes;   //set frameinfo    framesinfo=new int[numFrames][4];     for (int i=0;i<numframes;i++)     {      Framesinfo[i] [0]=i*image.getwidth ()/numframes;//the upper-left corner x-coordinate       framesinfo[i][1]=0;//-upper-left y-coordinate        framesinfo[i][2]=image.getwidth ()/numframes;//This frame width       framesinfo[i ][3]=image.getheight ()//This frame height    }   ///////////////    this.currentframe=0; }  public void Draw (Canvas thecanvas,graphics g)   {    if (visible)     {      g.setclip (Positionx, Positiony, framesinfo[currentframe][2), FRAMESINFO[CURRENTFRAME][3]);      g.drawimage (image, Positionx-Framesinfo[currentframe][0], positiony-framesinfo[currentframe][1],0);      g.setClip (0 , 0, Thecanvas.getwidth (), Thecanvas.getheight ());   } }  public void Step ()   { & nbsp;  if (visible)     {      This.positionx + = dx;       This.positiony + = dy;   } }  public boolean collideswith (Mysprite sprite)   {    return This.collideswith (sprite,bycollidearea); }  public boolean collideswith ( Mysprite Sprite, int checktype)   {    if (! Visible | |! sprite.visible)     {&NBSP;&NB sp;    return false;   }    if (checktype==bycollidearea)      {     //When two characters invade each other's area more than Collidearea think already collide (note: Here's the invasion area!= cross area)        int inx=sprite.positionx+sprite.framesinfo[sprite.currentframe][2]-this.positionx          >this.positionx+this.framesinfo[ currentframe][2]-sprite.positionx         ? this.positionX+ this.framesinfo[currentframe][2]-sprite.positionx         : sprite.positionx+sprite.framesinfo[sprite.currentframe][2]-this.positionx          ;      int Iny=sprite.positiony+sprite.framesinfo[sprite.currentframe ][3]-this.positiony          >this.positiony+this.framesinfo[ currentframe][3]-sprite.positiony         ? this.positionY+ this.framesinfo[currentframe][3]-sprite.positiony         : sprite.positiony+sprite.framesinfo[sprite.currentframe][3]-this.positiony           &NBSP;&NBSP;&NBSP;&Nbsp;  if (inx>0 && iny>0 && inx*iny>this.collidearea+sprite.collidearea)        {        return true;     }       else      {        return false;     }   }    Else if (checktype==bycollidexy)      {      if (sprite.positionx+sprite.framesinfo[sprite.currentframe][2]- sprite.collidex>this.positionx+this.collidex          & & this.positionx+this.framesinfo[currentframe][2]-this.collidex>sprite.positionx+sprite.collidex           && sprite.positiony+sprite.framesinfo[ sprite.currentframe][3]-sprite.collidey>this.positiony+this.collidey           &Amp;& This.positiony+this.framesinfo[currentframe][3]-this.collidey>sprite.positiony+sprite.collidey)       {          return true;      }      else      {         return false;     }   }    else//if ( Checktype==bycollideradius)     {      int Inx=math.abs (this.positionx+ this.framesinfo[currentframe][2]/2-sprite.positionx-(sprite.framesinfo[sprite.currentframe][2]+1)/2);       int Iny=math.abs (this.positiony+this.framesinfo[currentframe][3]/2-sprite.positiony-( SPRITE.FRAMESINFO[SPRITE.CURRENTFRAME][3]+1)/2);      if (inx*inx+iny*iny< ( Collideradius+sprite.collideradius) * (Sprite.collideradius+sprite.collideradius)       {&NBSP;&NBSP;&NBsp;     return true;     }      else       {        return false;     }    } }  Public boolean collideswith (image image, int x, int y)   {    return This.collideswith (image, X, Y,bycollidearea); }

public boolean collideswith (image image, int x, int y, int checktype) {if (! Visible) {return false; }

    if (checktype==bycollidearea)     {     // When two characters invade each other area more than Collidearea think already collide (note: Here's the invasion area!= cross area)       int inx=x+image.getwidth ()- this.positionx          >this.positionx+this.framesinfo[ currentframe][2]-x         ? this.positionx+this.framesinfo[ currentframe][2]-x         : X+image.getwidth ()-this.positionX          ;      int Iny=y+image.getheight ( )-this.positiony          >this.positiony+this.framesinfo[ currentframe][3]-y         ? this.positiony+this.framesinfo[ currentframe][3]-y         : Y+image.getheight ()-this.positionY          ;      if (inx>0 && iny>0 && Inx*iny>this.collidearea)       {        return true;      }      else      {         return false;     }   }    else if (checktype== bycollidexy)     {      if (x+image.getwidth () >this.positionX           && this.positionx+this.framesinfo[currentframe][2]- this.collidex>x          && y+image.getheight () > this.positiony          && this.positiony+this.framesinfo[ Currentframe][3]-this.collidey>y)       {         &nbsp Return true;     }      else      {         return false;     }   }     Else//if (checktype==bycollideradius)     {      int inx= Math.Abs (this.positionx+this.framesinfo[currentframe][2]/2-x-(Image.getwidth () +1)/2);       int Iny=math.abs (this.positiony+this.framesinfo[currentframe][3]/2-y-(Image.getheight () +1)/2);       if (Inx*inx+iny*iny<collideradius*collideradius)       {         return true;     }       else      {        return false;      }   } }}


Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.