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) {   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; } } }}
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.