首页 arrow 会员博客 arrow 1。0精灵类
1。0精灵类
Author Author: 不值得一提~ | Date Date: 2009-02-15 | View Count View: 923 | Section & Category 会员博客 - 个人博客 | Digg Digg: 1

我是一个新手分享下我写的精灵类~有问题的多多指教~

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

最近更新 ( 2009-02-16 )
 
   评论 (1)
评论的 RSS
1
by: 慑天晴空 (注册会员) 2009-02-16 08:29
谢谢,你给的太及时了,找了好久了,这下有个更好的思路了。。。 :grin :grin
回复该评论

我要发表评论

登录菜单

最新博客

本月热门

热门博客

订阅本站

RSS 0.91 RSS 1.0 RSS 2.0 ATOM 0.3 OPML