`
wayfarer
  • 浏览: 297731 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

J2ME移植-键值

阅读更多

1. J2ME标准api中Canvas中定义的键值有17(方向、确定、#*、数字键) + 4(游戏键) = 21个。在一般的手机中,这缺少了“左/右功能键”和“C键”,由于这三个键在标准api中并未给出,所以不同的手机厂商对其的支持也不同。

手机平台 左功能键 右功能键 C键
Nokia -6 -7 -8
Moto -21 -22 -8
SonyEricsson -6 -7 -8
Samsung -6 -7 -8
Sun Emulator -6 -7 -8

 

 

 

 

 

 

 

 

 

 

2. 有些手机不支持RMS,例如Nokia5300(S40 3rd, FP2)、Samsung手机。

3. 有些手机如果没有签名,每一次io连接都需要用户确认,比如sonyericsson手机、S40 5th, FP1。

4. 有些手机对全屏支持不太好,例如sonyericsson手机,在Canvas中draw()时坐标定位有偏移。

 

以上是我在开发中想重点强调的问题,下面是一些网友之谈,这些问题在我的开发中并没有遇到很强的阻力,但回头想想可能是我运气不错没有遇到相关问题。这里摘录过来供大家参考(原文出处已无从考证)。

      编写易于移植的J2ME代码
  我写第一个J2ME游戏的时候,根本就没想过移植的问题。所以那个游戏也就很难移植了。反过来,如果你已经计划好要移植了,那么事情就简单的多。这一节说的是代码问题。那就想想,不同手机之间在代码上会有哪些差异。
  (1) 屏幕尺寸不同
  这儿谈的主要问题,是自适应控件。所谓控件,就是菜单、文本框、列表框、进度条等等。这些控件的大小必须可以根据屏幕大小自适应的调整。按照第一篇说的方法,将屏幕大小作为变量参与到控件尺寸的计算即可得到正确的尺寸(自适应后的)。其次就是得到正确尺寸后怎么把它画出来。
  这要看你的GUI是怎么画得了,如果是用线画的,那就很简单;如果使用了图片,那么就可能要更换图片了。我的控件使用了图片平铺和画线结合,所以可以很容易的改变尺寸。如果控件变大了,则绘制时增加平铺的次数即可。
  顺便说一下,这些控件我只用了一个类表示,使用参数化的方法区分使用,毕竟咱要尽量少用类吧。
  (2) 支持的API不同
  如果你的游戏只限于使用Midp1.0,那么移植的时候就不用考虑什么了。实际上由于我们经常要使用图片翻转、象素绘制、全屏等,往往要用到厂商API或Midp2.0。显然移植的时候要考虑到这些API的差异。
  我的办法是将这些api封装一层,比如我需要使用创建透明子图的API,于是封装了一个函数createSubImg。这是Nokia版本:

public static Image createSubImg(Image img,int []imgRect){
  Image subImg = DirectUtils.createImage(imgRect[2],imgRect[3],0) ;
  subImg.getGraphics().drawImage(img,-imgRect[0],-imgRect[1],20);
  return subImg ;
}

  这是Midp2.0版本:

public static Image createSubImg(Image img,int []imgRect) {
  return Image.createImage(img,imgRect[0],imgRect[1],imgRect[2],imgRect[3],0) ;
}

  对于不同机型,该函数的实现不同,但功能相同,因此使用这个函数的代码在移植时无需修改。当然这样做增加了一些间接性,有可能降低性能。
  (3) 按键代码不同
  我们知道MIDP提供了Game Action,和按键代码无关,但这不够用啊,我们完全可以定义自己的Game Action,但首先让我们定义自己的虚拟按键码吧。我使用位记录每个键的状态,每个位代表一个按键,一个int有32个位所以足够了。
  当keyPressed发生时,我记下哪些键被按下;同样当keyReleased时,将那些被松开的键使用的位清0。某个键,也就是这个键盘状态整数里的某个位,就是我定义的一个虚拟键。当然它的值总是2的n次方了,和key code完全不搭边,所以需要我们用一个映射函数将key code映射到这些虚拟键。
  这个函数就是移植的关键,每个机型都要改写这个映射函数,在里面填入正确的key code。你可以在虚拟键的基础上再定义Game Action,支持在游戏中设置按键,这样就更灵活了。
  (4) 封装库
  如果想不更改一行代码就从MotorolaV600移植到Nokia N-Gage,那么为他们封装不同的库吧。我就这样在1分钟内完成了移植。我的库包含了一个游戏框架类(内含游戏循环和渲染函数,键盘处理,以及若干跨机型的工具函数),一个图形组管理类(管理图片的载入切割旋转绘制和动画等,有点像GameAPI中的Sprite)和一个控件类(包含了所有我需要的控件)。
  这3个类封装了不同机型的所有差异,我需要为每种机型改写这三个类,当然大部分代码是相同的了。此外我还写了一个工具支持图形组管理类,所见即所得的编辑动画和管理图片,当然这也对移植有帮助。
  总结:以上几条,总得讲来,无非是拆合而以。主要是要将差异性独立出来,便于更改。但是移植总得来讲还是比较郁闷,主要原因是各种机型有各自的bug,这就需要特殊处理啦。各位写代码时一定要想好移植的问题啊!

分享到:
评论

相关推荐

    手机按键键值测试 j2me小的手机软件

    本文将深入探讨“手机按键键值测试”这一主题,以及如何使用J2ME(Java Micro Edition)这一平台来实现这个功能。J2ME是Java平台的一个子集,主要用于嵌入式设备,如早期的智能手机和平板电脑,它为开发移动应用程序...

    J2ME游戏移植到Android手机

    【J2ME游戏移植到Android手机】是一个技术性较强的主题,涉及到两个不同的移动平台:Java ME(J2ME)和Android。J2ME是早期移动设备上广泛使用的开发框架,而Android则是现代智能手机的主要操作系统。当需要将J2ME...

    KeNan

    该程序在工作中,对手机程序的移植,了解手机参数,提供了很大的帮助。 虽然JBenchMark上有很多常用参数查询,但远没有自己检测的数据可信。 这个小程序可以检测: - FPS - 内存信息 有些手机用...

    使用J2ME技术开发RPG游戏(二)——按键处理机制.doc

    在使用J2ME技术开发RPG游戏的过程中,按键处理机制是一个关键部分,它关系到游戏的响应速度和玩家体验。本文将深入探讨如何构建这样一个高效、可移植的按键处理系统。 首先,为了确保游戏对按键的反应快速且灵敏,...

    手机开发代码 J2ME

    8. **设备适配**:由于J2ME应用于各种不同规格的设备,开发者需要考虑屏幕大小、输入方式和内存限制等差异,编写可移植的代码并进行设备适配。 9. **调试与测试**:开发J2ME应用时,通常使用模拟器进行初步测试,如...

    me.zip_ME_j2me js

    6. **代码可移植性**:虽然这个实现是为J2ME设计的,但开发者可能也考虑了代码的可移植性,使得它可以在其他Java环境中运行,比如Android或者JavaFX。 7. **文件命名"me"**:这可能是项目或类库的简写,可能代表...

    j2me code 源程序 泡泡

    通过深入研究 "PaoPao" 源代码,开发者可以学习到如何在 J2ME 平台上创建可移植、高效且用户友好的应用程序。这包括如何利用 J2ME API 实现特定功能,如何调试和测试代码,以及如何进行性能调优等。同时,理解这个源...

    Android游戏移植

    J2ME的数据保存通常依赖于RecordStore,相当于一个简单的键值对存储,而Android提供了SQLite数据库,可以创建多表结构,支持更复杂的数据操作。J2ME的RecordStore读写示例代码需要替换为Android的SQLite数据库操作...

    解决J2ME开发中的连续按键问题

    为了保证游戏的可移植性,通常会将物理按键的键值映射到游戏内定义的动作,例如UP, DOWN, LEFT, RIGHT等。在MIDP中,可以使用`Canvas`类的`getGameAction()`方法将物理键的键值转换为游戏动作。 在处理连续按键时,...

    J2ME开发大全(中文版)

    它是一种基于键值对的存储系统,适用于保存用户设置或游戏进度。 **6. 用户界面设计** J2ME的用户界面设计相对简单,主要是基于文本和基本图形元素。开发者可以利用Canvas类创建自定义画布,实现复杂的图形效果。 ...

    Android游戏移植[定义].pdf

    J2ME使用RecordStore系统保存数据,这类似于简单的键值对存储。而在Android中,通常使用SQLite数据库来实现更复杂的数据存储和检索功能。因此,数据保存部分的代码需要进行大幅度修改,以适应Android的数据库操作。...

    J 2 M E 俄 罗 斯 方 块

    《J2ME俄罗斯方块》是一款基于Java 2 Micro Edition(J2ME)平台开发的经典游戏,它将传统的俄罗斯方块玩法移植到了移动设备上,让玩家可以随时随地享受消除方块的乐趣。 J2ME是Java的一个子集,专门用于开发在资源...

    java开发宝典

    - **按键处理机制**:考虑到不同设备的按键可能有所不同,为了提高游戏的兼容性和移植性,开发者需要设计一套通用的按键处理机制。这种机制通常涉及按键映射,即将物理按键映射到游戏内部定义的键值上,从而实现跨...

    J2MEPPT(陈旭东北京交大)

    J2ME中的RecordStore是本地数据存储的主要方式,它提供了一种键值对的形式来保存和检索数据。开发者可以利用RecordStore管理用户数据,实现简单的数据库功能。 **多媒体应用** 虽然J2ME的资源限制较大,但仍然支持...

    java-all.pdf

    它被设计为可移植性强、安全性高,并且支持面向对象编程(OOP)。Java 的运行环境包括 **JDK (Java Development Kit)** 和 **JRE (Java Runtime Environment)**。 - **JDK**:Java 开发工具包,包含了编译、调试和...

Global site tag (gtag.js) - Google Analytics