自己总结的一个移动菜单方法,比较简陋哦

应该有许多错误,,不过是自己的理解

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值