J2ME程序开发全方位基础讲解汇总
J2ME新手入门教程(四)
下面分别说说每一个章节吧。
第一讲,主要讲解时介绍JAVA,这一讲大概了解一下即可!我们的手机配置都是CLDC1.1,MIDP2.0。
第二讲,主要是讲解电脑开发环境的安装,我们大部分人目前是用手机编译,手机开发工具已经在前面讲到了。有些人可能想安装电脑端的开发环境。教程中的NEC模拟器是用不到的,因为书中的主角是用NEC手机,所以才需要NEC模拟器。初学者在电脑端开发工具是WTK+JDK(JAVA开发环境),这一章节可以跳过。
第三讲,前面部分介绍了JAVA的结构,解释程序之类的,还有MANIFEST.MF的结构,这里希望大家认真了解,认真理解。至于后面的给终端传输软件可以跳过。
第四讲,后面的几乎每个章节都得认真看了。要省的就比较少了。这一讲已经开始编写简单的程序。这个是第四讲的模板Template.java。大家可以按书中的教程编写程序了。下面是其中一个的源码以及程序Template.zip,用mini查看。希望大家通过对照编写出自己的程序。
第八讲,模板TempleteApp.java,这是示例TempleteApp.zip和TempleteApp2.zip。
第九讲,跳过,这一讲我很长时间都没弄懂。
第十讲,这是示例S.zip和S2.zip。
第十一讲,示例S.zip,碰撞测试就不用学习了,因为貌似那时MIDP1.0用的方法,比较麻烦,现在MIDP2.0有简单的检测方法。
第十二讲,跳过吧。我按那个教程没有编写出放音乐的程序。不过这里有个播放音乐的示例S.zip,和教程的源码完全不同。
希望这些介绍对大家有帮助。
下面是上面那本书的UTF-8.zip的版本,用mini打开查看比较方便。
J2ME程序设计实例教程(第01章)
②
打包MIDP应用程序,并发布到Web服务器 打包 应用程序,并发布到 服务器 应用程序 启动模拟器,安装 启动模拟器,安装MIDP应用程序 应用程序
(教材 ,例子 教材P6,例子1-1) )
1.4 MIDP应用程序 应用程序
MIDP应用程序是由若干个类所组成的,其中必须有 应用程序是由若干个类所组成的, 应用程序是由若干个类所组成的 一个类继承来自javax.microedition.midlet包中 一个类继承来自 包中 的抽象类MIDlet,这个类被称为应用程序的主类。运 的抽象类 ,这个类被称为应用程序的主类。 行时,移动信息设备上预置的Java应用管理器(Java 应用管理器( 行时,移动信息设备上预置的 应用管理器 Application Manager, JAM)负责创建主类 ) 的子类) (MIDlet的子类)的实例对象。 的子类 的实例对象。
图1-4 J2ME WTK目录结构
1.3 J2ME无线工具包 无线工具包——开发 开发MIDP程序 无线工具包 开发 程序
MIDP应用程序的开发过程: 应用程序的开发过程: 应用程序的开发过程
1.创建新项目 2.编写 编写MIDP应用程序 应用程序 3.编译、预校验 编译、 4.在模拟器上运行、调试 在模拟器上运行、 5.打包、发布应用程序 打包、
MIDlet套件(MIDlet Suite)是MIDP应用程序的集合,被 套件( 应用程序的集合, 套件 ) 应用程序的集合 封装成一个Jar文件。在这个文件中包含下面三部分内容。 文件。 封装成一个 文件 在这个文件中包含下面三部分内容。 实现MIDP应用程序的类文件,在一个MIDlet套件中可以有 应用程序的类文件,在一个 实现 应用程序的类文件 套件中可以有 多个MIDlet存在。 多个 存在。 存在 MIDlet所需要的资源文件,例如,图标、声音等等。 所需要的资源文件,例如,图标、声音等等。 所需要的资源文件 Jar清单文件 清单文件——MANIFEST.MF,用于描述 文件的内容。 清单文件 ,用于描述Jar文件的内容。 文件的内容 每个MIDlet套件都有一个对应的 套件都有一个对应的JAD(Java Application 每个 套件都有一个对应的 ( Descriptor,Java应用描述器)文件,用来描述 应用描述器) , 应用描述器 文件,用来描述MIDlet套件 套件 的信息。 的信息。
J2ME复习要点
1.J2ME体系结构采用模块化、可扩展的设计。
这种模块化和可伸缩性是通过一个分层软件模型来实现的,这个分层软件模型是构建于设备本地操作系统之上。
(结构为:厂商可选择包,简表,配置(JVM,类库),本地操作系统)。
2.CDC(连接设备配置): CDC为消费电子设备和嵌入式设备制定了标准化的可移植的设备配置,提供了可应用于行业定义设备简表的虚拟机的基本类库。
CDC包含了一个软件包:javax.microedition.io,它包含了CLDC中定义的所有相同的类和接口。
应用对象:电视机顶盒、网络电视、可视电话等。
3.CLDC(连接有限设备配置): CLDC的目标是为资源受限且具有网络接入能力的设备提供一个标准化的、高度可移植的、小内存容量的Java应用程序开发平台。
CLDC 规范中定义的4个包 java.io,ng,java.util与javax.microedition.io,提供Java语言和CLDC设备所支持的基本功能。
应用对象: 手机、双向寻呼机、PDA等。
4. MIDP 所定义的其他包有javax.microedition.midlet,javax.microedition.lcdui,javax.microedition.lcdui.game,javax.microedition .rms,javax.microedition.media,javax.microedition.media.control等,提供诸如程序生命周期控制、用户界面、游戏、持久存储、声音媒体管理这样的功能。
5.什么是MIDLET MIDlet是在支持MIDP规范的移动信息设备上运行的应用程序,是MIDP中的基本执行单元。
它是用来满足小型资源受限设备的特殊需求,由MIDP规范所定义的一个全新的应用程序模型。
6. MIDlet的实现(1)MIDlet不能够像一般的Java程序一样单独地运行,必须运行在一个称作MIDP实现的特定的环境之中。
J2ME程序设计实例教程(第02章)
2.1 知识点——RecordEnumeration接口
RecordEnumeration接口定义了遍历记录枚举集 合中记录的方法。 常用方法:
public public public public public public public public public public
Form常用方法:
public public public public public public public
Form(String title) Form(String title, Item[] items) int append(Item item) void delete(int itemNum) void deleteAll) Item get(int itemNum) int size()
2.1 知识点——RecordStore类
打开、关闭、删除记录存储区的方法:
public static RecordStore openRecordStore(String name, boolean creat) public void closeRecordStore() public static void deleteRecordStore(String name)
1.
2.4代码实现 ——运行效果
各个功能的运行效果参见教材P43,图2-5
2.4代码实现 ——代码分析
教材P46~74
2.5 实践
动手实践是最好的老师。本章设计的课程表软件并 不完美,还有很多可以改进的地方。下面给出几点改进 意见,仅供参考。
添加图标 作息时间表 更改课程表浏览界面
j2me手机游戏开发基础
本文由smallyin03贡献 ppt1。
J2ME 手机游戏开发基础 主讲: 主讲:徐嵩 Version 3.0 目标 安装/配置开发环境 安装 配置开发环境 手机2D动画基础 手机 动画基础 2 手机游戏的实现技术 嵌入式 短信息 J2ME 3 开发环境简介 J2SE-1_5_0 J2ME Wireless Toolkit 2.2 Eclipse 3.2.0 Release版 版 EclipseMe 1.5 – (http://eclipseme.sourceforge.net) 4 MIDP的概念 MIDP的概念 Mobile Information Device Profile – 移动信息设备简表 – 具体实现MIDP简表的程序就称为MIDlet程序 (简表就是针对具体的J2ME配置规范,如厂商NOKIA等) – MIDP MIDP是由多家移动设备厂商一起设计提出 – 是一个工业标准简表 5 搭建游戏框架 创建 创建J2ME项目 项目 – J2ME Midlet Suite (Midlet程序套件) 创建 创建J2ME应用程序 应用程序 – J2ME Midlet 6 Hello World! } import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class HelloMIDlet extends MIDlet { private TextBox textBox; public HelloMIDlet() { textBox = new TextBox("Hello MIDlet", "Hello World!", 15, 0); } protected void startApp() throws MIDletStateChangeException { //显示 显示textBox中的内容 显示 中的内容 Display.getDisplay(this).setCurrent(textBox); } protected void pauseApp() {} protected void destroyApp(boolean arg0) throws MIDletStateChangeException {} 7 2D动画基础 2D动画基础 GameCanvas的基本概念及键盘控制方式 的基本概念及键盘控制方式 – 提供了游戏的基本接口的抽象类(屏幕类) – 拥有屏幕缓冲 – 可以直接得到键盘的物理状态,但很特殊 8 GameCanvas类基本开发流程 GameCanvas类基本开发流程 Graphics g; 获得图形接口 g = this.getGraphics(); g.setColor(0, 0, 0); g.fillRect( , , , ,); flushGraphics(); 绘制图形 显示在屏幕上 9 示例: 示例:DrawBlackRect 快让我动起来吧 GameCanvas类的键盘输入 类的键盘输入 – getKeyStates()函数可以直接获得键盘码 – 但没有提供本身的键盘监听函数 int keyState = getKeyStates(); if((keyState & UP_PRESSED) != 0){ if(drawY - 2 > 0){ drawY = drawY - 2; } else{ drawY = getHeight(); } } 10 示例:MoveRect 示例 Sprite类简介 Sprite类简介 用来实现人物动画、移动和碰撞检测 用来实现人物动画、 Sprite类提供了分割图片的功能 类提供了分割图片的功能 构造函数 – public Sprite(Image image) – public Sprite(Sprite sprite) – public Sprite(Image i, int frameWidth, int frameHeight) 11 创建Sprite对象 创建Sprite对象 private Sprite sprite; private Image spriteImage; try{ spriteImage = Image.createImage(“/npc01.png”); }catch(Exception e){} sprite = new Sprite(spriteImage, 32, 48); 12 Sprite类开发 Sprite类开发 0 3 6 1 4 7 2 5 8 9 10 11 13 示例: 示例:MoveSpriteDemo TiledLayer类 TiledLayer类 构造函数 – public TiledLayer(int columns, int rows, Image image, int tiledWidth, int tiledHeight) 用法 – TiledLayer background; – tiledImage = Image.create(“/title.png”); – background = new TiledLayer(3, 3, tiledImage, tiledImage.getWidth()/3, tiledImage.getHeight()/3); 14 TiledLayer类开发 TiledLayer类开发 1 4 7 2 5 8 3 6 9 setCell(int col, int row, int tiledIndex 示例: 示例:TiledLayer,SpriteTiledDemo , 15 LayerManager LayerManager layManager; 屏幕 layManager = new LayerManager(); 图层1 图层 layManager.append(background3); 图层2 图层 layManager.append(background2); 图层3 图层 layManager.append(background1); layManager.paint(g, 0, 0); flushGraphics(); BombDemo 16 总结 搭建游戏框架 Sprite类 类 TiledLayer类 类 LayerManager类 类 17 推荐网站 http://www.gameres.com http://www.rpg2knet.com 18 谢谢! 谢谢! 书山有路勤为径 Version 3.0。
J2ME Java平台开发
J2ME Java平台开发随着移动设备的普及和功能的不断扩展,Java 2 Platform, Micro Edition (J2ME) 在移动应用开发中扮演着重要的角色。
J2ME 是一种基于 Java 的软件平台,专门用于开发嵌入式设备上的应用程序。
本文将介绍 J2ME 的基本概念、特点和开发流程,并探讨在 J2ME Java 平台开发中的一些最佳实践。
一、J2ME 概述J2ME 是 Java 2 Platform, Micro Edition 的缩写,是为嵌入式设备提供的一种轻量级的 Java 平台。
与其它版本的 Java 平台相比,J2ME 在资源消耗上更加倾向于节省,并且适应于具有有限计算和存储能力的移动设备。
J2ME 平台包括了三个主要的配置(Configuration):CLDC(Connected Limited Device Configuration)、CDC(Connected Device Configuration)和 Foundation Profile。
其中,CLDC 是 J2ME 平台最常用的配置,适用于移动电话等较低端设备的开发。
二、J2ME 特点1. 跨平台性:由于 J2ME 是基于 Java 平台的,可以在不同的嵌入式设备上运行。
这意味着开发者只需编写一次代码,就可以将应用程序部署到多个不同设备上,极大地提高了开发效率和应用程序的可移植性。
2. 硬件适配性:J2ME 提供了一系列标准的 API,使得开发者可以与不同类型的硬件进行交互。
通过这些 API,开发者可轻松地访问设备的底层功能,如显示屏、网络连接、摄像头等,从而实现更加丰富和贴近用户需求的应用程序。
3. 轻量级:J2ME 平台的编译和执行环境相对较小,这使得应用程序在设备中的占用空间更小,可以运行在资源有限的设备上。
这也使得开发者能够方便地将应用程序传输到移动设备中,提高了应用程序的易传播性和部署效率。
J2ME程序开发全方位基础讲解汇总
一、J2M E中需要的J a v a基础知识现在有大部分人,都是从零开始学J2M E的,学习J2M E的时候,总是从J a v a 基础开始学习,而且现在讲J a v a基础的书籍中都是以J2S E来讲基础,这就给学习造成了一些不必要的麻烦,下面将J2M E中用到的和不需要的J a v a基础知识做一个简单的说明:J2M E中使用到的J a v a基础知识:1、J a v a语法基础:包括基本数据类型、关键字、运算符等等2、面向对象的思想:类和对象的概念,继承和多态等等。
3、异常处理4、多线程J2M E中没有用到的J a v a基础知识:1、J D K中j a v a c和j a v a命令的使用2、J a v a基础中的很多类在J2M E中没有,或者类中的方法做了大量的精简。
所以建议在J2M E中熟悉类库。
3、A p p l e t、A W T、S w i n g这些知识在J2M E中根本使用不到。
简单说这么多,希望学J2M E的朋友们能少走一些弯路,不足之处希望大家积极指正和补充。
二、J2M E中暂时无法完成的功能列一些J2M E中暂时无法完成的功能,希望大家能积极补充:1、在手机中不更改代码实现移植,主要指游戏。
2、动态修改按钮文字。
3、在C a n v a s上接受中文输入。
4、操作本地资源、例如地址本、已收短信息等。
5、制作破坏性的手机病毒。
6、其他等待大家来补充。
三、J2M E的跨平台性J2M E技术源于J a v a,所以也具有J V M的优势,可以在支持J a v a的平台上进行移植,但是现在的J2M E技术在跨平台上却做的很糟糕,我们来简单看一下原因:1、手机的屏幕尺寸不一:这个主要在界面制作上。
如果你使用的是高级用户界面,比如你做的是应用开发或者用户登陆、用户注册这样的通用功能时,一般没有什么问题。
如果你使用的是低级用户界面,比如你做的是游戏,那么你就需要考虑这个问题了。
2、厂商的扩展A P I不统一:例如N o k i a的扩展A P I类库U I系列,在别的手机上或者没有实现,或者包名不同等等。
J2ME核心知识
5、 TextBox 组件与 TextField 组件的区别 TextBox:用于生成一个允许用户输入和编辑文本的屏幕,独占整个屏幕。是多行的。 TextBox 的内容限制类型:
常量 TextField.ANY TextField.EMAILADDR TextField.NUMBER TextField.decimal TextField.PHONENUMBER TextField.URL
第九章
1、 RMS 基本概念:RMS 本质上就是一个小型的数据库管理系统,它以一种简单的、类似表 格的形式组织信息,并将信息存储起来形成持久化存储,以供应用程序在重新启动后继 续使用。
2、 RMS 包含两个重要概念:Records(记录)和 Records Stores(记录仓库)。 3、 Record 是系统中最重要的实体。与数据库管理系统不同的是,在移动设备存储空间存储
(2)应用级别安全机制:通过一种称为“沙箱”的封闭机制来实现。应用程序只能访问 由配置、简表、可选包定义的类库和设备支持的其他类。 CLDC 中类的预审核机制:当程序的源程序被编译后,必须先经过预审核器预审核,然 后才能生成可以被下载到目标设备上运行的类文件。
第五章
1、 什么是 Midlet Midlet 是在支持 MIDP 规范的移动信息设备上运行的应用程序。Midlet 不是一个单独 的文件,而是一个文件的集合,它除了必须包含一个继承自 javax.microedition.midlet.Midlet 的类之外,还包括此类执行时所需的其他类和资源文 件。
(1) 跨平台特性; (2) 面向对象编程语言的强大能力; (3) 强大的内置安全模型; (4) 与企业应用的无缝结合。
第二章
CLDC 安全机制: 两个级别安全机制: (1)底层安全机制:即虚拟机的安全,最关键的安全机制。它要求运行在虚拟机上的 应用程序必须遵循 Java 语言的标准语法,且能够检查出并阻止恶意代码以各种方式对设 备进行破坏。由类文件验证器实现。
第1章 走进J2ME移动开发世界
Windows Mobile 大量的开发人员、熟悉的开发工具及技 术支持,自身拥有强大的技术能力和 强悍的营销能力。 Symbian 具有市场配置和销售的绝对优势,同时 与无线软件开发公司密切合作,针对 其平台开发出一系列的工具。 内存要求低,软件版本更新较快,微内 核结构简单,为构造可嵌入系统提供 了可高度模块化的构件方法。 操作简单,对硬件要求低,应用软件反 应迅速,新推出的Palm OS支持无线 接入功能,支持各种无线通信技术, 融入了更多的BeOS特性。
1.4.3厂商可选包(Optional Packages)
所谓的厂商可选包,指的是由厂商提供给 程序开发人员的一组和其它规范(或API) 没有任何依存性的类库,开发人员可以利 用这一类库开发出具有特定功能的应用程 序。
1.5 JTWI
即使使用标准的API,程序也不一定就能够移植, 因为J2ME规范并没有对应用程序的大小和执行环 境等细节进行详细规范,如各个厂商对应用程序 的大小限制不一样,有的是30K,有的是50K。对 线程支持的程度也不一样,有的可以支持3个,有 的是5个。 因此仅仅依靠J2ME还不能够确保应用程序的可移 植性,JSR185中提出的JTWI(Java Technology for Wireless Industry,无线工业Java标准)是一个综合性 的规范,其目的主要是为了确保J2ME软件的可移 植性。它主要包括2个部分:
四种Java平台
注意:不同的Java版本支持的同一名称的 类和方法在内部实现上很可能是不同的, 因为Sun针对不同的运行环境(如执行速度、 内存容量等)进行了优化,但幸运的是这 一点对开发人员并没有任何影响。
1.4 J2ME技术框架
J2ME定义了一种灵活的层次规范结构,来 规范众多的移动设备。不同层次的规范相 互协作来提供一个完整的移动Java平台。 J2ME定义的移动Java平台分为4层:
J2ME手机应用开发技术-1
MIDP应用程序的生命周期
三个状态
运行状态(Active) 暂停状态(Pause) 销毁状态(Destroyed)
状态的含义
运行状态:程序正在运行 暂停状态:资源暂时被释放,随时可运行 销毁状态:释放资源,关闭程序
中国最大、最专业的3G移动互联网人才培养基地
中国最大、最专业的3G移动互联网人才培养基地
手机游戏开发流程
开发
美工的工作 音乐的工作 程序员的工作,开发规范 ,自测规范,作品演示
开发手机游戏的三种方式
换图 改版 原创 标题党
中国最大、最专业的3G移动互联网人才培养基地
手机游戏开发流程
测试
开发出一个机型就开始测试 测试规范 测试流程
ቤተ መጻሕፍቲ ባይዱ
中国最大、最专业的3G移动互联网人才培养基地
由于Java语言自身的特点,和系统的关联不大,所以开 发速度很快。程序的开发周期比较短。
技术入门快
由于JAVA语言相当的普及,而对于有一定JAVA语言基 础的人来说,学习J2ME技术的门槛很低,所以J2ME技 术的普及速度很快。
扩展性强:可适应Android、BlackBerry(黑莓)开发
中国最大、最专业的3G移动互联网人才培养基地
配置文件
作用
为了能够让手机的操作系统能够辨别出具体的 每个程序 在配置文件中说明运行这些程序所需要的硬件 条件和软件平台
JAD文件和MANIFEST文件。 JAD文件则说明了具体的运行配置。 MANIFEST文件用来描述MIDlet Suite的配 置
中国最大、最专业的3G移动互联网人才培养基地
手机游戏开发流程
策划 内部评审 开发 测试 移植 销售 上线,组织活动
3 详解J2ME MIDP程序开发流程
详解J2ME MIDP程序开发流程MIDlet 手机程序运行的基本架构MIDlet 手机程序开发流程MIDlet 手机程序生命周期MIDP 手机程序发布与安装使用混淆器(Obfuscator)WTK的相关配置仿真器的使用使用仿真器执行已开发MIDlet程序在进入手机程序设计之前,我们需要说明一个新的名词,那就是在手机上的应用程序名称。
我们都知道,在浏览器上执行的Java 程序叫做Applet,在Palm OS上执行的Java程序叫做Spotlet,而在手机上执行的应用程序就称之为“MIDlet”(Mobile Information Derice-let)。
如果有学习过Java程序设计的朋友,那么对MIDlet的开发就可以称的上是一个简单的差使了。
因为同样都是Java的架构,而且MIDlet在类别的使用上却简单了很多。
这也就是说,就算没有学过Java程序设计也不需要惊慌,只要学习少数的几个简单类别就可以写出一个MIDlet应用程序了。
一、MIDlet手机程序运行的基本架构根据上一章所介绍的知识得知,想要开发手机上的应用程序就是需要架构在CLDC (Configuration Layer)与MIDP(Profile Layer)之上,而WTK中就会符合且包含了JSR为CLDC 与MIDP的规范与所需的API函数库。
换句话说,想要学会MIDlet程序设计就必须先要深入了解它的基本架构与相关名称。
1.MIDlet Suit在手机上的应用程序称之为MIDlet,那么何谓MIDlet Suit(套件)呢?就是多个MIDlet 的集合封装,图1即为MIDlet与MIDlet Suit的关系示意图。
图1 MIDlet 与MIDlet Suit的关系示意图既然MIDlet Suit与MIDlet都可以在手机上执行,那么为何需要将MIDlet集合起来成为一个MIDlet Suit呢?这样的想法是基于手机上的资源有限,所以尽可能地将可以共享资源的MIDlet集合起来。
跟我学J2ME手机应用开发——RMS相关技术及应用实例(第1部分)
1.1跟我学J2ME手机应用开发——RMS相关技术及应用实例(第1部分)1、RMS(Record Management System)(1)移动数据库是企业移动解决方案的基本工具移动数据库系统通常应用在诸如便携式电脑、车载设备、移动电话等嵌入式设备中,它不仅能够管理本地终端的数据与信息,而且还能连接中心数据库处理各种企业事务,满足不同行业、不同的用户在移动环境下的各种信息处理需求,大大地提高了信息的时效性。
本地查询是指所需信息存储在移动设备内的嵌入式数据库中,用户在离线模式下通过查询嵌入式数据库得到所需信息的模式。
(2)可以把RMS理解为MIDP上的简单的数据库管理系统因为在某种场合下,也许会要求程序中生成的对象在程序结束后并不立即被消灭,而是把它存储到某个地方以供我们以后取用。
但J2SE中提供的可持续存储机制如JBDC和Object Serialization API并不适合用于移动设备,所以MIDP中定义了RMS来提供这种机制。
RMS是J2ME应用程序进行持久性存储的唯一途径,而应用持久性存储可以纪录游戏的排行榜、记录用户输入的用户名和密码等方面的信息。
(3)RMS其实是轻量级的嵌入式关系数据库为了支持离线操作,移动客户必须在本地存储应用程序数据,轻量级的嵌入式关系数据库是理想的数据存储工具。
与一些线性数据存储工具如纯文本文件或J2ME的记录管理系统相比,在存储复杂的数据时,嵌入式关系数据库要有效得多;智能移动客户端的嵌入式数据库可以通过无线网络与企业数据库进行数据同步,使得嵌入式数据库的数据保持更新。
2、与持久性存储有关的概念(1)什么是持久性存储持久性存储简单的理解就是数据不因为程序的退出而丢失,而一般在程序中声明的变量都是存储在stack或者heap上的,程序退出后这些数据会被清除以释放资源。
而存储在RMS 中的数据是不会被清除的。
其中的记录存储是由各个记录组成的二进制文件,而记录是记录存储中的一个存储单元,每个记录是一个字节数组。
J2ME手机游戏开发入门
动画的原理
• 系列动作的图片连续绘出
23
精灵动画
左行
0
1
2
后行
3
4
5
前行
6
7
8
右行
9
10
11
24
让精灵动起来
Sprite的方法 的方法
• • • setFrame(int index) – 显示哪一帧,设置动画开始的画面 nextFrame() – 显示下一帧 Move(int dx,int dy) – 在x和y方向上移动
16
先写一个Midlet 先写一个Midlet
• 在手机上运行的 在手机上运行的Java程序叫:MIDlet 程序叫: 程序叫 • 创建一个MIDlet的步骤: 的步骤: 创建一个 的步骤
1 2
打开Eclipse 打开 新建J2ME Midlet 新建 Suite
3
新建J2ME 新建J2ME Midlet
J2ME手机游戏开发入门 手机游戏开发入门
Version 3.0
主要内容
• • • • • • • • 手机平台的特点 J2ME的优势和劣势 的优势和劣势 J2ME程序的运行环境 程序的运行环境 J2ME程序的开发环境 程序的开发环境 游戏的种类 游戏程序的基本功能 J2ME游戏开发关键的包和类 游戏开发关键的包和类 J2ME游戏开发实战 游戏开发实战
注意: 注意: 需要降 低循环 的速度
向右移动
if((this.getKeyStates() & GameCanvas.RIGHT_PRESSED)!=0) { if(!this.moveRight) { this.moveLeft = false; this.moveRight = true; this.moveUp = false; this.moveDown = false; this.role.setFrame(9); } this.role.nextFrame(); if(this.role.getFrame()==0) { this.role.setFrame(9); } this.role.move(5, 0); } 27
《J2ME移动软件程序设计》课件第10章
J2ME移动软件程序设计
10.3.2 Βιβλιοθήκη 戏按键在 MIDP 中 定 义 的 游 戏 按 键 : DOWN 、 UP 、 LEFT 、 RIGHT 、 FIRE 、 GAME_A 、 GAME_B 、 GAME_C 和 GAME_D。
上述游戏按键在不同的移动设备上是由不同的物理按键 代表的。为了在程序中保证可移植性,就应该使用
10.2.1 MIDlet的基本结构
游戏程序是从javax.microedition.midlet类派生出来的。 每 个 MIDlet 包 括 三 个 必 要 的 方 法 : startApp() 、
pauseApp()和destroyApp()方法。 游戏MIDlet中通常需要在屏幕上绘制图形,这就必须使
10.4.3 模拟重复按键
如果设备不支持重复按键功能,通过代码模拟重复按键。 (1)建立一个需要重复执行的任务。 (2)当按键被按下时,开始执行这一任务。 (3)以一定的频率反复执行这一任务。 (4)当按键释放时停止执行任务。
实现重复按键代码,HappyFace2.java 实现连续移动和加速移动代码,HappyFace3.java
getGameAction()方法在物理按键和游戏按键之间转换。
J2ME移动软件程序设计
10.3.3 实例
响应键盘事件 实例,KeyEvent .java
J2ME移动软件程序设计 10.4 使用重复按键
10.4.1 简述
重复按键功能实际上是当用户按下一个按键时就开始执 行一个功能,直到用户释放按键为止。
10.7.2 使用setClip()方法绘制精灵
setClip()方法可以设置在屏幕上绘制图形的有效区域。 只有在setClip()设置的有效区域内的屏幕才会被改变, 而在setClip()设置以外的图形不会被改变。
J2ME经典
J2ME开发入门唉,本来想写一个长一些的文章,但越写越乱,算了,就写了一点点体会,大家凑合着看吧J2ME开发的一些体会J2ME方面开发的资料,确实是少之又少,一般给新手推荐的都是王森先生的《PDA与手机开发入门》一书,然而该书其实并不适合新人阅读,该书的前几章花了很大篇幅来讲解命令行调试J2ME程序的方法和很多要点,其实这些东西,作为一个初级的J2ME开发者来说,完全没有必要学习和掌握,反而只会给自己平添很多负担。
现在做J2ME开发,大多都有了IDE(集成开发环境),比如JB,Eclipse 什么的,就算是用最简单的WTK,也不需要进行path的配置等操作,所以初学者完全可以跳过这些内容,直接上手。
我的认为,做程序开发,重在实践经验,而不是理论研究,因此,新人完全可以直接从J2ME 的程序流程入手,直接进入,而不需要去了解太多基本概念,比如什么是API,什么是MIDP,什么是JDK等等。
这些东西我到现在也不是很清楚,但并不影响我进行开发,我是讲究实用主义的,因此,本文的基调就在于讲述一些实用的开发方法。
另外首先要声明:本文中的一切开发调试都是在WTK环境下进行的,请读者注意。
一.学习J2ME需要的基础知识J2ME本身是Java语言的一部分,因此,对Java语言有一定了解是必要的,而Java语言本身是面向对象编程的一种语言,因此,对类与对象的概念要有必要的了解,而这些内容在本文中就不进行介绍了。
另外,本文行文中对API的介绍很简略,因此,读者应该自己多查阅API中的相关内容。
二.J2ME开发环境简介J2ME的开发环境如前文所述,目前主要有JB,Eclipse,WTK三种方式,其中前面两者都是集成开发环境,在编程上比较方便,有智能联想等功能,而WTK相对只提供了手动编译和打包,并且没有Debug 功能。
但WTK不需要多余的配置,对各种模拟器可以说是即插即用,而且在WTK下的程序目录简洁明了,方便查询。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
J2ME程序开发全方位基础讲解汇总一、J2ME中需要的Java基础知识现在有大部分人,都是从零开始学J2ME的,学习J2ME的时候,总是从Java基础开始学习,而且现在讲Java基础的书籍中都是以J2SE来讲基础,这就给学习造成了一些不必要的麻烦,下面将J2ME中用到的和不需要的Java基础知识做一个简单的说明。
J2ME中使用到的Java基础知识:1、Java语法基础:包括基本数据类型、关键字、运算符等等2、面向对象的思想:类和对象的概念,继承和多态等等。
3、异常处理4、多线程J2ME中没有用到的Java基础知识:1、JDK中javac和java命令的使用2、Java基础中的很多类在J2ME中没有,或者类中的方法做了大量的精简。
所以建议在J2ME中熟悉类库。
3、Applet、AWT、Swing这些知识在J2ME中根本使用不到。
简单说这么多,希望学J2ME的朋友们能少走一些弯路,不足之处希望大家积极指正和补充。
二、J2ME中暂时无法完成的功能列一些J2ME中暂时无法完成的功能,希望大家能积极补充:1、在手机中不更改代码实现移植,主要指游戏。
2、动态修改按钮文字。
3、在Canvas上接受中文输入。
4、操作本地资源、例如地址本、已收短信息等。
5、制作破坏性的手机病毒。
6、其他等待大家来补充。
三、J2ME的跨平台性J2ME技术源于Java,所以也具有JVM的优势,可以在支持Java的平台上进行移植,但是现在的J2ME 技术在跨平台上却做的很糟糕,我们来简单看一下原因:1、手机的屏幕尺寸不一:这个主要在界面制作上。
如果你使用的是高级用户界面,比如你做的是应用开发或者用户登陆、用户注册这样的通用功能时,一般没有什么问题。
如果你使用的是低级用户界面,比如你做的是游戏,那么你就需要考虑这个问题了。
2、厂商的扩展API不统一:例如Nokia的扩展API类库UI系列,在别的手机上或者没有实现,或者包名不同等等。
3、手机平台上实现的bug:例如Nokia的7650在实现双缓冲上有bug,那么在这种机型上运行的软件就不能使用双缓冲。
其他NOKIA上的一些bug,可以参看:/Mailbomb/archive/2005/03/24/329123.aspx4、手机性能问题。
不同手机的可用内存、最大jar文件都有要求,例如Nokia S40的大部分手机支持的最大jar文件为64K,最大可用内容为210K。
所以现在的手机软件,特别是游戏都提供支持的机型列表,也才有了手机游戏移植人员的存在。
四、学习J2ME可以从事的工作种类现在J2ME技术可以说相当的火暴,这里介绍一些学好了J2ME之后可以从事的工作的种类:1、J2ME游戏开发人员根据游戏策划或者文档要求,在某种特定的机型(以Nokia S40或S60居多)开发游戏程序。
这是现在大部分J2ME程序员从事的工作。
需要熟练掌握:高级用户界面、低级用户界面、线程,如果是网络游戏,还需要熟练网络编程。
2、J2ME应用开发人员现在的移动应用还不是很多,但是还是出现了一些,特别是移动定位以及移动商务相关的内容。
需要熟练掌握:高级用户界面、线程和网络编程。
3、J2ME游戏移植人员参照源代码,将可以在一个平台上可以运行的游戏移植到其他平台上去。
例如将Nokia S40的游戏移植到S60上,或者索爱的T618等等。
主要是控制屏幕坐标,有些可能需要替换一些API。
需要熟悉各平台之间的差异以及相关的技术参数,比如屏幕大小、最大jar文件尺寸等等。
五、J2ME程序设计的几个原则1、使用面向对象编程。
虽然使用面向过程编程可以减小文件的尺寸,但是为了以后维护的方便和利于扩展,还是要使用面向对象编程。
2、使用MVC模式将模型、界面和控制分离。
现在很多的程序将三者合一,但是如果你做的程序比较大的话,还是建议你进行分离。
3、自动存储用户设定使用RMS来存储用户的信息,例如存储用户上次输入的用户名、密码、用户对于系统的设定等,这样不仅可以减少用户的输入,而且对用户友好。
很多程序甚至做了自动登陆等。
4、一些系统设置允许用户关闭。
如背景音乐、背景灯显示等。
5、将低级用户界面的绘制动作放在一个独立的线程里面去。
6、在需要大量时间才能完成的工作时,给用户一个等待界面。
六、从模拟器到真机测试对于J2ME开发者来说,模拟器给我们带来了很多方便,比如可以在模拟器中调试程序以及很方便的察看程序的效果,但是模拟器也给我们带来了一些问题,比如模拟器实现的bug等等,所以进行真机测试是必须的。
1、为什么要进行真机测试?因为模拟器程序可能存在bug,以及真机的性能有限,所以必须进行真机测试。
2、如何将程序传输到机器中?将程序传输到机器中有如下方式:a)OTA下载b)使用数据线传输c)红外传输d)蓝牙你可以根据条件,选择合适的方式。
3、真机测试主要测什么?真机测试的内容很多,主要测试以下几个方面:a)程序的功能b)程序的操作性,是否易操作c)程序的大小,比如Nokia S40系列的手机大部分接受的最大文件尺寸为64Kd)程序运行速度,速度是否可以忍受。
七、从WTK到厂商SDK对于J2ME爱好者来说,基本上大家都是从SUN的WTK(J2ME Wireless Toolkit)开始的,但是对于实际应用来说,仅仅使用WTK是远远不够的,所以在学习过程中,必须完成从WTK到SDK的跨越。
1、厂商SDK的下载地址?/Mailbomb/archive/2005/01/01/236606.aspx2、厂商SDK和WTK有什么不同?厂商SDK最简单的理解就是在WTK的基础上增加了自己的模拟器和自己的扩展API。
也就是说,你在使用厂商的SDK时,可以使用厂商的扩展类库,例如Nokia的UI类库,和厂商自己的模拟器而已。
每个厂商的扩展API都不多,而且不尽相同。
3、如何使用?有些厂商SDK的使用都和WTK相同,例如SamSung。
Nokia提供了独立的界面来开发,但是这个界面在实际开发中使用不多。
4、厂商SDK的问题厂商SDK实现过程中,有一些bug,而且和真机实现不一致。
例如NOKIA的混音播放问题等等。
八、在J2ME中获得手机IMEI的方法IMEI是Internation mobile entity identification的简称,在手机中输入*#06#可以显示该数字,长度为15位,全球唯一,永远不会冲突,所以可以作为识别用户的一个标志。
下面是在J2ME中获得IMEI的方法:1、MOTO系列的手机可以通过读取系统的IMEI属性获得,代码如下:String imei=System.getProperty("IMEI");2、SIEMENS系列的手机可以通过读取系统的com.siemens.IMEI属性获得,代码如下:String imei=System.getProperty("com.siemens.IMEI");九、J2ME网络连接中显示问题的解决办法在网络编程中,有些时候会出现一些在没有接收到网络数据就显示界面的,造成界面显示不符合要求(例如公告显示,会先显示公告的背景图片再显示公告信息),这里提一个简单的解决办法给大家:解决这种情况的方法分成三个步骤:1、在需要显示的界面中,调用发送网络数据的方法。
每次显示时调用该构造方法,不调用Display的setCurrent方法显示。
2、显示等待界面(例如进度条等),给用户提示,在进行网络连接。
3、在处理网络反馈的数据完以后,调用Display的setCurrent方法显示显示当前界面。
十、增强J2ME的String能力——分割字符串从JDK1.4以后,String类中新增了split方法来实现字符串的分割,但是在J2ME中却没有该方法(MIDP2.0中也没有实现),但是在实际使用过程中,有些时候的确要用到这种操作,这里将我以前实现的一段代码和大家共享:/***分割字符串,原理:检测字符串中的分割字符串,然后取子串*@param original需要分割的字符串*@paran regex分割字符串*@return分割后生成的字符串数组*/private static String[]split(String original,String regex){//取子串的起始位置int startIndex=0;//将结果数据先放入Vector中Vector v=new Vector();//返回的结果字符串数组String[]str=null;//存储取子串时起始位置int index=0;//获得匹配子串的位置startIndex=original.indexOf(regex);//System.out.println("0"+startIndex);//如果起始字符串的位置小于字符串的长度,则证明没有取到字符串末尾。
//-1代表取到了末尾while(startIndex<original.length()&&startIndex!=-1){String temp=original.substring(index,startIndex);System.out.println(""+startIndex);//取子串v.addElement(temp);//设置取子串的起始位置index=startIndex+regex.length();//获得匹配子串的位置startIndex=original.indexOf(regex,startIndex+regex.length());}//取结束的子串v.addElement(original.substring(index+1-regex.length()));//将Vector对象转换成数组str=new String[v.size()];for(int i=0;i{str=(String)v.elementAt(i);}//返回生成的数组return str;}十一、J2ME在低级用户界面上分行显示文字在J2ME的低级用户界面开发中,经常会遇到需要在Canvas上显示大量的文字,例如关于界面、游戏说明、游戏公告等信息。
如果在设计时,将文字的内容和长度都固定,既不利于修改也不利于维护。
下面介绍一个简单的方法,实现一个简单、可维护性强的方式。
实现方法:1、将需要显示的所有信息做成一个字符串。
2、编写一个将该字符串按照要求转换为字符串数组的方法。
3、将转换后的数组以循环的方式显示在Canvas上。
通过这样三个步骤,则修改显示的信息时,只需要修改包含显示信息的字符串即可,自己书写的方法可以按照以前的标准重新分割新的字符串。