初学J2ME时,看过的好文章(四)

J2ME游戏开发实例讲解 文章来源:J2ME开发网一、序言  昨天在网上闲逛,发现一篇讲解用delphi实现华容道游戏的文章,颇受启发.于是,产生了将华容道游戏移植到手机中去的冲动.现在手机游戏琳琅满目,不一而足,华容道的实现版本也很多.正巧不久前笔者对J2ME下了一番功夫,正想借这个机会小试牛刀。选用J2ME的原因还有一个就是目前Java开发大行其到,无线增殖业务迅猛发展,J2ME的应用日渐活跃起来,也希望我的这篇文章能 阅读详情
 

在J2ME的低级用户界面编程中,进行事件处理是经常使用到的技术之一,因为处理手机键盘上的按键事件是最常使用到的一种,所以就以此为中心,介绍一下实际使用过程中三种处理方式进行说明:

  1、 覆盖keyPressed方法

  在继承了Canvas的界面中,如果需要进行按键的处理,我们只需要在该类中覆盖Canvas类里面的这个方法,当手机按键被按下时,系统会自动调用该方法,并把被按下的按键的键值(keyCode)作为参数传递进来。所以如果需要处理按键事件,只需要在该方法内部检测按下的按键的键值就可以了。

  在手机键盘上,可以简单的分为功能键区域和数字键区域,功能键指手机上的左右软键,中间的导航键以及接听电话和挂机键等,数字键区域指手机键盘上的0-9数字键以及*号和#号键。其中功能键的个数以及键值,不同的手机区别很大,而数字键的区域的按键个数,以及按键的键值都是一样的。
 
  检测键值有如下两种方法:

  a) 直接使用keyCode值

  直接使用keyCode值的代码有如下两种,分别是:

if(keyCode == 52){
 //处理代码
}


  或者:

if(keyCode == Canvas.KEY_NUM4){
 //处理代码
}


  以上是使用按键处理中的两种代码书写风格,建议实际使用过程中使用第二种,这样代码容易阅读。 而在实际的游戏开发过程,除了一些特殊的功能键,例如手机上的左右软键,很少使用这种方式进行编写,而是采用下面的方式进行处理。

  b) 使用gameAction(游戏动作)

  gameAction是一种将手机键盘映射成为游戏动作的机制,通过这种机制,可以使不同手机上的按键都能转换为类似或者是相同的游戏动作,当然这个工作是由每个手机厂商实现的。

  实际使用中的代码如下:

//将keyCode转换为游戏动作
int action = getGameAction(keyCode);


  其中,keyCode和游戏动作的对应关系如下:

  Canvas.UP——数字键2和向上导航键
 
  Canvas.DOWN——数字键8和向下导航键

  Canvas.LEFT——数字键4和向左导航键

  Canvas.RIGHT——数字键6和向右导航键

  Canvas.FIRE——数字键5和确定导航键

  Game_A、Game_B、Game_C、Game_D分别对应键盘上的1、3、7、9或者是7、9、*、#键。

  转换成游戏动作以后的事件处理代码如下:

switch(action){
case Canvas.LEFT://向左
 //处理代码
 break;
case Canvas RIGHT://向右
 break;
case Canvas.UP://向上
 break;
 ……
}


  这个就是MIDP1.0中最常使用的按键处理方式。但是无论这种方式如何的优越,它还是无法摆脱keyPressed方法的束缚。

  这样就将游戏编程中的三种逻辑:延迟、响应用户操作、重新绘制,隔离了开来,分别在用户线程和系统线程中进行。

  为了解决这个不足,MIDP2.0在GameCanvas内部引入了一种新的事件处理方式按键状态(keyStates)机制。

  2、 使用keyStates

  按键状态指系统通过一个变量来记录手机键盘上每个和游戏动作有关的按键,如果该键按下则设置对应的位(bit)为1,否则为0,然后可以通过位运算获得哪个按键被按下。

  注意:按键状态只能在MIDP2.0的GameCanvas子类中里面使用,而且只能处理和游戏相关的按键。如果支持该处理方式处理游戏按键的话,将在keyPressed方法中无法接收到和游戏相关的按键,其他按键还可以正常接收响应。

  如果要使用该功能,首先要在GameCanvas子类的构造方法中,让该界面支持该操作,这个步骤可以使用GameCanvas的构造方法来实现,代码如下:

//使该界面支持按键状态处理
super(true);


  这样该界面就可以进行按键状态处理。和前面的按键处理不同,该种处理方式可以脱离keyPressed方法的限制,也就是说可以写在任意的处理方法内部,只需要在线程中调用即可。

  使用该处理方式,无论线程中的延迟多么长,系统都可以保持该按键的状态。这个好处是其他处理方式无法做到的。

  首先,获得游戏按键状态,代码如下:

//获得游戏的按键状态
int states = getKeyStates();


  该代码的作用是获得当前按键状态,并把按键状态清空!具体的处理代码如下:

//处理按键状态:
if((states & GameCanvas.LEFT_PRESSED) != 0){ //向左
}
if((states & GameCanvas. RIGHT_PRESSED) != 0){ //向右
}


  在MIDP2.0的Game API处理中,这个方式使手机游戏开发重新回归到传统的模式中,也使游戏的处理更加灵活。

J2ME平台下的走迷宫小游戏开发实战 J2ME(Java 2 Platform, Micro Edition)是为移动设备和嵌入式设备特别设计的一个Java平台版本。它的设计目标是让Java应用可以在有限的硬件资源下运行,这使得J2ME成为了早期智能手机和功能手机游戏开发的重要平台。在本章中,我们将首先对J2ME平台进行整体介绍,包括它的架构、核心组件以及它与Java其他版本的关系。随后,我们会探讨J2ME在游戏开发领域的应用,以及它如何适应移动设备的特定需求。## 1.1 J2ME架构概览。 阅读详情

相关推荐

J2ME平台下的手机游戏开发实战:大富翁游戏源代码解析

J2ME(Java 2 Platform, Micro Edition)是为移动设备设计的Java平台版本。它允许开发者创建适用于各种手机和其他嵌入式设备的应用程序,特别是通过无线连接访问网络信息的应用程序。J2ME(Java 2 Platform, Micro Edition)为移动设备提供了一套GUI组件,允许开发者创建图形化的用户界面。在本节中,我们将介绍J2ME中GUI组件的分类,以及设计原则和用户体验的重要性。Canvas类是J2ME中用于自定义绘图的核心类。它允许开发者覆盖。

weixin_33431149的博客 1046

j2me学习心得

真正开始学习J2ME应该算是从暑假7月份开始。到现在屈指算来也不过是三个月的时间。现在我把中间的一些学习经历写出来,和大家一起分享学习j2me的一些经验和感悟。   在学习J2ME之前,一些认识和不认识的朋友不止一次地说J2ME是JAVA里最难的一块。因为你的代码是运行在有限的资源中,必须尽最大可能地被优化,所以你必须具有很高的编程素养。不过我还是要坚持学习J2ME,也许是出于我对手机游戏软件这一

hydrogen2005的专栏 1398

揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程

本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。

weixin_29296241的博客 525

精通J2ME中的Hello World

       初学java的时候一般都写过如下的HelloWorld程序,今天我准备详细讲述一下J2ME中的HelloWorld。无论你是J2ME开发高手还是新手都应该读读这篇文章,我想它会对你有所帮助!      在javax.microedition.midlet包中定义了一个非常重要的类MIDlet,所有J2ME的应用程序都必须扩展这个类,只有这样才可以使得应用管理软件(Applicat

mingjava的专栏 2317

ComfyUI 的 LoRA 训练:秋叶 LoRA-scripts 参数设置与测试方法详解

秋叶 LoRA-scripts 的参数设置需结合理论(如模型原理、优化器机制)和硬件条件(显存、算力),新手可先按推荐值起步,再逐步调整。测试时,loss 值帮你判断训练是否正常,XYZ 图表法帮你找到最佳使用参数。掌握这些知识,你就能避开 LoRA 训练的常见坑,从 “盲目调参” 变为 “精准训练”。

2301_78150483的博客 2400

逆变器技术解析:DDSRF双解耦在正负序分离中的关键作用

本文深入解析了DDSRF双解耦技术在逆变器正负序分离中的关键作用。通过建立正反旋转坐标系并利用交叉反馈解耦网络,DDSRF能快速、精准地分离电网电压中的正负序分量,从而显著提升锁相环在电网不平衡条件下的精度与系统稳定性,是现代高性能并网逆变器的核心算法之一。

m3n5b7v8c9x的博客 409

初学J2ME的时,看过的好文章(一)

J2ME程序开发全方位基础讲解汇总(1) J2ME中暂时无法完成的功能      列一些J2ME中暂时无法完成的功能,希望大家能积极补充:   1、在手机中不更改代码实现移植,主要指游戏。   2、动态修改按钮文字。   3、在Canvas上接受中文输入。   4、

冯小卫 842

Python与numpy版本兼容性排查指南

本文详细解析了Python与numpy版本兼容性问题,提供了快速诊断和解决版本冲突的实用方法。通过查看版本信息、使用官方兼容性对照表以及降级或升级环境等方案,帮助开发者有效避免常见的报错问题,如'ImportError'和'AttributeError'。文章还介绍了使用虚拟环境和requirements.txt等工程实践,确保项目依赖的稳定性。

weixin_29089057的博客 319

JDK、J2EE、J2SE、J2ME的区别

1.JDK 是Javadevelopmenttoolkit,相当于是Java的库函数,是编译,运行java程序的工具包。 J2EE是Java2enterpriseedition是Java的一种企业版用于企业级的应用服务开发 J2SE是Java2standardedition是Java的标准版,用于标准的应用开发 J2ME是Java2MicroEdition是Java的微型版,常用于手机上的...

gaofengyan的博客 1864

AC7811无感FOC实战:从开环到闭环的电机控制调试全记录

本文详细记录了基于国产AC7811芯片实现无感FOC电机控制的全过程。从硬件软件环境搭建、开环I/F启动调试,到滑模观测器参数整定,再到平滑切入闭环及双环PID调节,提供了完整的实战步骤与参数调试心法。文章重点分享了无感控制从开环到闭环切换的关键技巧与常见问题排查清单,为工程师提供了一份避坑指南。

kotlin6android的博客 713

poincare截点

poincare映射定义比较抽象,简单理解就是每个原始周期取一个点,表现在程序中的思路如下: 以激励的周期T0为poincare的原始周期,设置1个周期取m个点,取N个周期设置T0/m为ode45的步长,每个周期的 i*m个点处取一个点(i=0.0-1.0),把这些点画出来就行了。有几个点就是几倍周期。 (注意:ode45算法是变步长的算法,所以一定要之前自己设置步长,我在这个地方吃了很大一个亏...

小树 3007

初学J2ME时,看过的好文章(二)

用惯的J2ME高级UI而还没有接触过低级UI的developer一定不会习惯跟Canvas的初夜!因为他没有Form那么多可以触摸到风情万种,也没有Item的独特风味,有的只是一个只画笔一个画布,一些只有名字的事件响应方法,更奇怪的事情是你不能手动的调用paint()去做你想做的

冯小卫 793

LAMMPS实例教程—In文件详解

本博文主要介绍专栏 《LAMMPS实例教程—In文件详解》, 针对于 Lammps 可分析的物理过程进行讲解,提供 In 文件以及后处理方法,持续更新。 目前分为8个专题: 1)力学专题、2)传热专题、3)相变专题、4)界面专题、5)吸附专题、6)流动专题、7)物性专题以及8)基础理论专题。

Rockyoung 3万+

J2ME移动开发,菜鸟指南(转)

要进行J2ME的开发,首先必须要建立开发的平台,而在开发的平台选择上,我来介绍3条路。 1:功能比较全的平台JBUILDER; 搭建这个平台,我们必需要的材料有:JBUILDER 7 或 JBUILDER 8 ,BORLAND ...

cuankuangzhong6373的博客 1114

14 ABSOLUTE评估肿瘤纯度

14 ABSOLUTE评估肿瘤纯度 Absolute介绍 ABSOLUTE可以直接从体细胞突变和拷贝数变异的结果中推断肿瘤纯度和倍性的计算方法。 通常来说,我们取肿瘤组织进行测序,往往是一个混合样品,既包括肿瘤细胞也包括正常细胞,因此需要进行肿瘤纯度 purity 的评估。当从混合样品中提取 DNA 进行测序后,得到的也是一个混合样品的结果。肿瘤不一定是单纯的二倍体了,其本身异质性高,存在部分突变部分不突变的情况,直接分析拷贝数变异,得到的结果并不准确,评估肿瘤倍性 ploidy 也更加必要。而 ABSO

qq_23435961的博客 4214

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【J2me 2D 游戏开发系列】◣Himi游戏开发启蒙教程◢Java零基础学习J2me游戏开发全过程!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/j2me-2/774.html          ☞ 点击订阅 ☜ 本博客最新动态!及时将最新博文通知您!Himi从写博客的最早开始就是Android游戏开发相关的,其实那么很多童鞋也知道Himi是做Java-J2me/Kjava出身,所以不少童鞋

李华明Himi 5475

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

MVC模式在j2me项目中的应用(一)

MVC模式在j2me项目中的应用(一)作者:FavoYang       Email:favoyang@yahoo.com 欢迎交流Keywords:MVC j2me UI模式 内容提要:本文简要的介绍了MVC模式的思想,并分析了MVC模式的利弊,最后结合MIDP平台给出几种常见的MVC模式实践。相信此文对任何一个使用midp平台的商务程序开发者都或多或少的有所帮助。 版权声明:本文同时发表在ww

alikeboy的专栏 3177

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

J2ME RMS的学习笔记 (转载)

RMS,全称Record Management System,是J2ME应用程序进行持久性存储的唯一途径。在手机应用中常常作为得分记录、游戏信息存储等的工具使用。通过两篇文章的学习,我大致掌握了RMS的开发。第一篇文章《RMS概念解析与使用指南》从一些Q&A中介绍了RMS所涉及的基本概念,然后结合数据库的概念介绍了javax.microedition.rms包里面的四个接口、一个类、五个异常(文中

ghfseawindy的专栏 3914

初学J2ME时,看过的好文章(三)

因为在MIDP手机编程中,没有控制台的概念,所以所有的MIDP手机软件都必须有自己的界面,下面就熟悉一下MIDP的界面类体系。 首先说明的是,MIDP的标准界面类都位于javax.microedition.lcdui包中,使用时一定要记得引入。 在界面体系中,所以可以直接显示的界面类都继承自同一个父类——Displayable。根据是否能直接操作屏幕,以及是否和屏幕尺寸相关,MIDP的界面类分...

peizhiinfo 82

用Eclipse做J2Me开发的前期配置

我也是一个初学者,从一个初学者的角度上讲,就是要尽可能的详细,因为这个东西稍微配置不对,或者是那里没有注意到,就会走不少的弯路,所以我在这里把配置讲得非常的详细,以图文的形式展示,以免你看了不知道所去。从搞通到把这篇文章搞好,共花了三个小时的时间,我相信这篇文章能够给你节省两个小时的时间。 1、我现在下载的MTJ(Mobile Tools for Java Platform)0.7,Ec...

weixin_34107739的博客 151
上一篇: 初学J2ME时,看过的好文章(三)
下一篇: 初学J2ME时,看过的好文章(五)
coding_or_coded
博客等级 码龄16年 216粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值