我是一个新手分享下我写的精灵类~有问题的多多指教~
import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; class Sprite { /**********************全局变量*************************************/ private int picture_getWidth; private int picture_getHeight; private int picture_movex; private int picture_movey; private int setFrameX; private int setFrameY; private int time = 0; private int setFrameSequence[]; private Image picture; private boolean setVisible_apen = true; private int specifiedx; private int specifiedy; private int specifiedgetWidth; private int specifiedgetHeight; private boolean fanhui; /***************************创建精灵*******************************/ Sprite(Image im, int getWidth, int getHeight) { if (im != null) { if (im.getWidth() % getWidth == 0 && im.getHeight() % getHeight == 0) { picture_getWidth = getWidth; picture_getHeight = getHeight; picture = im; } else { IllException(); } } else { NULLException(); } } Sprite(Image im) { if (im == null) { NULLException(); } else { picture_getWidth = im.getWidth(); picture_getHeight = im.getHeight(); picture = im; } } /****************************异常***********************************/ private void NULLException() { throw new NullPointerException("图片为空"); } private void IllException() { throw new IllegalArgumentException("参数异常"); } /***************************画方法************************************/ public void paint(Graphics g) { if (setVisible_apen) { g.setClip(picture_movex, picture_movey, picture_getWidth, picture_getHeight); g.drawImage(picture, 0 + picture_movex + setFrameX, 0 + picture_movey + setFrameY, 0); } } /***************************设定位置**********************************/ public void setPosition(int a, int b) { if (setVisible_apen) { picture_movex = a; picture_movey = b; } } /*****************************移动**********************************/ public void move(int a, int b) { if (setVisible_apen) { picture_movex += a; picture_movey += b; } } /**************************位置输出********************************/ public int getX() { return picture_movex; } public int getY() { return picture_movey; } /*************************指定帧数**************************************/ public int setFrame(int a) { if (setVisible_apen) { setFrameY = (a / (picture.getWidth() / picture_getWidth)) * -picture_getHeight; setFrameX = (a - ((a / (picture.getWidth() / picture_getWidth)) * (picture.getWidth() / picture_getWidth))) * -picture_getWidth; if (a / (picture.getWidth() / picture_getWidth) > (picture.getHeight() / picture_getHeight) - 1 || a - ((a / (picture.getWidth() / picture_getWidth)) * (picture.getWidth() / picture_getWidth)) > picture.getWidth() / picture_getWidth || a < 0) { IllException(); } return a; } else { return 0; } } /**************************指定数组***********************************/ public void setFrameSequence(int a[]) { if (setVisible_apen) { setFrameSequence = a; setFrameY = (a[0] / (picture.getWidth() / picture_getWidth)) * -picture_getHeight; setFrameX = (a[0] - ((a[0] / (picture.getWidth() / picture_getWidth)) * (picture.getWidth() / picture_getWidth))) * -picture_getWidth; } } /***************************下一帧************************************/ public void nextFrame() { if (setVisible_apen) { if (setFrameSequence != null) { if (time < setFrameSequence.length - 1) { time++; } else { time = 0; } setFrameY = (setFrameSequence[time] / (picture.getWidth() / picture_getWidth)) * -picture_getHeight; setFrameX = (setFrameSequence[time] - ((setFrameSequence[time] / (picture.getWidth() / picture_getWidth)) * (picture.getWidth() / picture_getWidth))) * -picture_getWidth; } else { setFrameX -= picture_getWidth; if (setFrameX + picture.getWidth() <= picture_movex) { setFrameX = 0; setFrameY -= picture_getHeight; } if (setFrameY + picture.getHeight() <= picture_movey) { setFrameY = 0; } } } } /*************************得到当前帧数********************************/ public int getFrame() { if (setVisible_apen) { if (setFrameSequence != null) { return setFrameSequence[time]; } else { return -(((setFrameY / picture_getHeight) * (picture.getWidth() / picture_getWidth)) + (setFrameX / picture_getWidth)); } } else { return 0; } } /*************************精灵和精灵的碰撞*********************************/ public boolean collidesWith(Sprite s) { if (setVisible_apen) { if (picture_movex + (picture_getWidth + specifiedx) > s.picture_movex && picture_movex + specifiedgetWidth < s.picture_movex + s.picture_getWidth && picture_movey + (picture_getHeight + specifiedy) > s.picture_movey && picture_movey + specifiedgetHeight < s.picture_movey + s.picture_getHeight) { return true; } else { return false; } } else { return false; } } /*************************精灵和图片的碰撞*********************************/ public boolean collidesWith(Image s, int x, int y) { if (setVisible_apen) { if (picture_movex + (picture_getWidth + specifiedx) > x && picture_movex + specifiedgetWidth < x + s.getWidth() && picture_movey + (picture_getHeight + specifiedy) > y && picture_movey + specifiedgetHeight < y + s.getHeight()) { return true; } else { return false; } } else { return false; } } /*************************精灵和地图的碰撞*********************************/ public boolean collidesWith(TiledLayer t) { fanhui = false; if (setVisible_apen) { for (int i = 0; i < t.map_hua.length; i++) { for (int l = 0; l < t.map_hua[0].length; l++) { if (t.map_hua[i][l] != 0) { if (picture_movex + (picture_getWidth + specifiedx) > l * t.Width && picture_movex + specifiedgetWidth < l * t.Width + t.Width && picture_movey + (picture_getHeight + specifiedy) > i * t.Height && picture_movey + specifiedgetHeight < i * t.Height + t.Height) { fanhui = true; if (fanhui) { break; } } } } if (fanhui) { break; } } return fanhui; } else { return fanhui; } } /*************************设计精灵的可见度*********************************/ public boolean setVisible(boolean a) { setVisible_apen = a; return setVisible_apen; } /*************************得到精灵的可见度*********************************/ public boolean isVisible() { return setVisible_apen; } /*************************设计精灵得碰撞区域*********************************/ public void defineCollisionRectangle(int x, int y, int width, int height) { specifiedx = x * -1; specifiedy = y * -1; specifiedgetWidth = picture_getWidth - width; specifiedgetHeight = picture_getHeight - height; } }