自己總結的一個移動菜單方法,比較簡陋哦

應該有許多錯誤,,不過是自己的理解

Img _img;//需要建立Img類,讀取圖片文件
int _MenuX=32;//圖象是333*96
_img= new Img("/menu.png", 5, 1, true);

void Update_Menu(Img _img,int _Menunum,int _MenuX,int _MenuY)
{
            Graphics g;     
            boolean _MenuMove;
            int menu;//臨時記錄菜單
            int _menuDir ;//控制方向

            _img.drawFrame(g, _kartX, _kartY, _kart,16+4);
            if(!_MenuMove && (_keyMap[4] > 0 || _keyMap[10] > 0))
            {
                _MenuMove = true;
                _menuDir = -1;//選擇時菜單方向的控制1爲向右,-1爲向左
            } else
            if(!_MenuMove && (_keyMap[5] > 0 || _keyMap[12] > 0))
            {
                _MenuMove = true;
                _menuDir = 1;//選擇時菜單方向的控制1爲向右,-1爲向左
            } else
            if(!_MenuMove)
                _menuDir = 0;
            if(_menuDir == -1)//選擇時菜單方向的控制1爲向右,-1爲向左
            {
                _MenuX -= 20;//加載時選的3種車型的x位置,只是初位置
                if(_MenuX < -88)
                {
                    _MenuX = 172;
                    _menu--;
                    if(_menu< 0)
                        _menu = _Menunum;//一共幾種菜單
                }
                if(_MenuX == 32)
                    _MenuMove = false;
            } else
            if(_menuDir == 1)
            {
                _MenuX += 20;
                if(_MenuX > 172)
                {
                    _MenuX = -88;
                    _menu++;
                    if(_menu >  _Menunum)
                        _menu= 0;
                }
                if(_MenuX == 32)
                    _MenuMove = false;
            }
            if(_ok)
            {
                _mainState =1;        //程序狀態       
            }
            if(_back)
            {
                _menuState = 0;             
            }

img.java文件

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class Img
{

    static final int SCREENHEIGHT = 208;
    static final int SCREENWIDTH = 176;
    int dx;
    int dy;
    int he;
    Image im;
    Image im2;
    boolean loaded;
    String name;
    int px;
    int py;
    int wi;

    public Img(String s, int i, int j, boolean flag)
    {
        im2 = null;
        px = 1;
        py = 1;
        wi = 0;//顯示圖片的寬度
        he = 0;//顯示圖片的高度
        dx = 1;//圖片所在的X座標
        dy = 1;//圖片所在的Y座標
        name = s;//把圖片的地址傳過來
        px = i;//每行有幾張圖片
        py = j;//每列有幾張圖片
        im = null;//圖片對象
        loaded = false;//沒有加載
        if(flag)
            load();
    }

      void drawFrame(Graphics g, int i, int j, int k)
    {
        boolean flag = false;
        if(!loaded)
            load();
        if(loaded)
        {
            g.setClip(i, j, dx, dy);
            int l = k % px;
            if(l < 0)
                l = -l;
            int i1 = i - l * dx;
            int j1 = j - (k / px) * dy;
            if(flag)
                g.drawImage(im2, i1, j1, 0);
            else
                g.drawImage(im, i1, j1, 0);
        }
    }

    void drawFrame(Graphics g, int i, int j, int k, int l)
    {
        if(!loaded)
            load();
        if(loaded)
        {
            int i1 = 0;
            int j1 = 0;
            Graphics _tmp = g;
            if((l & 0x20) != 0)
                j1 = 204 - dy;
            Graphics _tmp1 = g;
            if((l & 0x8) != 0)
                i1 = 176 - dx;
            Graphics _tmp2 = g;
            if((l & 0x2) != 0)
                i1 = (176 - dx) / 2;
            Graphics _tmp3 = g;
            if((l & 0x1) != 0)
                j1 = (204 - dy) / 2;
            drawFrame(g, i1 + i, j1 + j, k);
        }
    }

    boolean load()
    {
        try
        {
            im = Image.createImage(name);
            wi = im.getWidth();
            he = im.getHeight();
            dx = wi / px;//圖片寬度除以每行有幾張照片,結果是單個圖片的小寬度
            dy = he / py;//圖像所在Y座標
            loaded = true;
        }
        catch(Exception exception) { }
        return loaded;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章