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

原创 2006年05月17日 01:51:00

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

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

相关文章推荐

一个比较简陋的计算器

  • 2011年07月27日 10:51
  • 9KB
  • 下载

一个比较简陋的动态标题栏

没什么说的,就是一个代码整理。 先来看一下效果图: 标题少的: 标题多的: 因为最近两个项目都有类似效果,所以这里整理了一下代码。实现代码借鉴了 PagerSlidingTabStrip.比较...
  • lv_fq
  • lv_fq
  • 2016年11月14日 23:06
  • 1290

一个比较简陋的命令行socket聊天程序

server.c #include #include #include #include "zjfdll.h" DWORD WINAPI SendProc(PVOID pParam) { ...

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。 标签: c#objectnewlineexceptionbytestring 2010-05-17 01:10 117...

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。 分类: 通讯类库设计2010-05-17 01:10 60772人阅读 评论(232) 收藏 举报 c#obj...

【练习代码】试用百度BAE和练手jetty continuation的副成品 —— 一个简陋的WEB版LBS聊天应用

最近写了个测试小应用,是试用百度BAE和练手jetty continuation的副成品,一个简陋的WEB版LBS聊天应用聊天应用。     简介 ---- * 首先需要说明,我最初的想法以...
  • auzll
  • auzll
  • 2013年10月09日 09:19
  • 609

一个简陋的自定义用线程Thread实现的计时器Timer,可以增加定时时间

原来用的Timer(java.util.Timer),后来需要中途增加延迟时间,Timer不支持。自己写了个简陋的,应该够用。类如下:public class ExTimer extends Thre...

简单遮罩层(比较简陋,纯js)

简陋的遮罩层
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己总结的一个移动菜单方法,比较简陋哦
举报原因:
原因补充:

(最多只允许输入30个字)