欢迎光临
我们一直在努力

MySprite 2.0-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

/**

为midp1.0写的sprite类的升级版本 * <p>title: 精灵类</p> * * <p>description: </p> * * <p>copyright: copyright (c) 2004</p> * * <p>company: </p> * * @author not attributable * @version 1.0 */import javax.microedition.lcdui.* ;public 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 numframes;  public int currentframe;  public int[][] framesinfo;//本版本吧各个帧的尺寸存到数组中,而不是象1.0中等大  public boolean visible=true;  public int dx;  public int dy;  public int collidex=0;//当两个角色交叉横向距离超过collidex时认为已经碰撞  public int collidey=0;//当两个角色交叉纵向距离超过collidey时认为已经碰撞  public int collidearea=0;//当两个角色互相入侵面积超过collidearea时认为已经碰撞(注意:这里的入侵面积!=交叉面积)  public int collideradius=0;//碰撞半径  public int state=0;

  public mysprite(image image,int numframes) throws exception {    this.image = image;    this.numframes = numframes;    //set frameinfo    framesinfo=new int[numframes][4];    for (int i=0;i<numframes;i++)    {      framesinfo[i][0]=i*image.getwidth()/numframes;//左上角x坐标      framesinfo[i][1]=0;//左上角y坐标      framesinfo[i][2]=image.getwidth()/numframes;//本帧宽度      framesinfo[i][3]=image.getheight();//本帧高度    }    ///////////////    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()  {    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)    {      return false;    }    if (checktype==bycollidearea)    {      //当两个角色互相入侵面积超过collidearea时认为已经碰撞(注意:这里的入侵面积!=交叉面积)      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          ;      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          && 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))      {        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)    {      //当两个角色互相入侵面积超过collidearea时认为已经碰撞(注意:这里的入侵面积!=交叉面积)      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;      }    }  }}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » MySprite 2.0-JSP教程,Java技巧及代码
分享到: 更多 (0)

相关推荐

  • 暂无文章