JR 精品文章 - 在J2ME中基于MIDP1.0实现组合按键
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » J2ME综合 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
在J2ME中基于MIDP1.0实现组合按键
deadspace 原创   更新:2006-02-21 13:41:06  版本: 1.0   

我们知道有些手机是不支持重复按键功能,为了模拟重复按键的功能,我们不得不使用一个线程来进行处理。对于重复按键网上已经有一

些文章进行了探讨,其实利用线程我们还可以实现组合按键的功能。当然,在手机这种设备上,利用组合按键进行游戏,有一定的限制,

因为手机各个按键排列比较紧凑,同时按下两个甚至三个按键在操作上会有局限性。但这也是仁者见仁、智者见智的问题,如果你想提高

游戏的可玩性和娱乐性,组合按键仍是必不可少的条件。

我定义了一个进行按键监听的类,这个类实现了Runnable接口。在这个类里关键的一个数据结构就是一个字节型的数组,它是用来存储当

前所有被按下的键。我这里把数组的长度设定为2,主要是从应用的角度来考虑的,因为毕竟在当前手机设备上同时按三个键进行游戏的

不多。下面就是实现组合按键的核心代码。

按键事件类:
import javax.microedition.lcdui.*;

public class NewEvent implements Runnable{

    KeyEventCanvas c=null;

    /*
     * 用来判断是否有键被按下
     */
    protected boolean switchPoint;

    /*
     * 这个数组用来存储所有同时被按键的键码
     */
    protected byte[] keyCode;

    /*
     * 访问数组的索引
     */
    byte index;


    public NewEvent(KeyEventCanvas c){
        this.c=c;
        keyCode=new byte[2];
    }

    /*
     * 这个方法把被按键的键码存储到数组中
     */
    public synchronized void startAction(int keyCode){
        this.keyCode[index]=(byte)keyCode;
        index=(byte)((index+1)%this.keyCode.length);
    }

    /*
     * 当某个键被释放时,这个方法把该键存储在数组中的键码置为0
     */
    public synchronized void stopAction(int keyCode){
        for(int i=0;i<=this.keyCode.length-1;i++){
            if(this.keyCode[i]==(byte)keyCode){
                this.keyCode[i]=0;
                break;
            }
        }
    }
    
    /*
     * 这个方法用来判断是否有被按下的键,返回true表示有键按下,返回false表示没有键被按下
     */
    public synchronized boolean getSwitchPoint(){
        this.switchPoint=false;
        for(int i=0;i<=this.keyCode.length-1;i++){
            if(this.keyCode[i]!=0){
                this.switchPoint=true;
                break;
            }
        }
        return this.switchPoint;
    }

    /*
     * 返回字节数组
     */
    public synchronized byte[] getKeyCode(){
        return this.keyCode;
    }
    
    public void run(){
        byte[] tmp=this.getKeyCode();
        while(true){
            while(this.getSwitchPoint()){
                /*
                 * 通过这个循环遍历数组,遇到被按下的键就进行处理
                 */
                for(int i=0;i<=tmp.length-1;i++){

                    if(tmp[i]!=0){
                        switch(c.getGameAction(tmp[i])){
                        
                        case Canvas.UP:
                            c.y--;//y是在Canvas中定义的一个属性,表示y轴坐标
                            break;
                        case Canvas.DOWN:
                            c.y++;
                            break;
                        case Canvas.LEFT:
                            c.x--;//x是在Canvas中定义的一个属性,表示x轴坐标
                            break;
                        case Canvas.RIGHT:
                            c.x++;
                            break;
                        }
                    }
                }
                c.repaint();
                try{
                    Thread.sleep(10);
                }catch(InterruptedException e){
                    
                }
            }
        }
    }
}


Canvas类:
import javax.microedition.lcdui.*;

public class KeyEventCanvas extends Canvas{

    int x,y;
    NewEvent mke=null;
    
    public KeyEventCanvas(){
        mke=new NewEvent(this);
        new Thread(mke).start();
    }

    public void keyPressed(int keyCode){
        mke.startAction(keyCode);
    }
    
    public void keyReleased(int keyCode){
        mke.stopAction(keyCode);
    }

    public void paint(Graphics g){
        g.setColor(0xffffff);
        g.fillRect(0,0,this.getWidth(),this.getHeight());
        g.setColor(0xff0000);
        g.fillRect(x,y,8,8);
    }
}


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     6       1
作者其它文章: 作者全部文章

这个文章共有 0 条评论
主题: 基于MIDP1.0利用底层API实现文本自动换行 上一篇文章
返回文章列表 返回〔J2ME综合〕
下一篇文章 主题: J2ME应用程序内存优化三招


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号