J2ME概述以及一些常用应用代码
J2ME MIDP手机游戏开发第1章 J2ME技术概览

要点提示 ——打包中的常见问题
如果包的大小有异常,很可能把Thumbs.db文件打进来了,此 文件是系统自动生成的,并且是隐藏的,搜索目录,删除它即可。 在使用混淆器的过程中,如果发生应用程序异常,可以尝试不 使用或者更换混淆器。 JAR文件下载到设备后,如果出现无效文件格式的问题,可 能是由于手机设备不支持MIDP的版本。WTK2.5默认的MIDP版 本是2.1,WTK2.1默认的MIDP版本是2.0。重新打包修改MIDP版 本,再下载即可
1.3.3 知识拓展:应用程序描述文件ห้องสมุดไป่ตู้清 单文件
清单文件用于提供关于 JAR文件内容的信息,它被打包存储在 应用程序描述文件即 JAD (Java Application Descriptior)文件。 JAR文件中,文件名为 MANIFEST.MF 。清单文件中的数据格 它由许多描述 MIDlet套件的属性组成,位于 JAR 文件之外。 式采用“属性名:值”对规范。 MIDP2.0 规定清单文件中必 须包括的属性有: JAD文件中必须包含的属性有: MIDlet-Name:MIDlet套件的名字 注意:前三个属性是和JAD 1、MIDlet-Name:应用程序名称 MIDlet-Version:应用程序版本号 :版本号 文件共享的,属性值必须一 2、MIDlet-Version 致,否则MIDlet无法运行。 :开发商 3、 MIDlet-Vendor:开发商名称 4、MIDlet-Jar-URL : JAR 文件的URL MIDlet-<n> :对套件中每一个 MIDlet 的说明。 MIDlet-<n> 表 5、示对第 MIDlet-Jar-Size :的说明,值分为 JAR 文件的大小 n个MIDlet 3部分,用逗号间隔。 6、MicroEdition-Configuration :CLDC 版本 Name:MIDlet名字 7、MicroEdition-Profile :MIDP 版本 Icon:PNG图象文件名, MIDlet的图标 8、MIDlet-Description :应用程序简介 Class:MIDlet 的类名 9、Media-Price :信息费 MIDlet-Profile:简表(MIDP 1.0或MIDP2.0) MIDlet-Configuration:配置(CLDC)
J2ME讲稿

J2ME一引言无线Java是开放技术,其相关标准都是由业界共同制定的,可以在不同的芯片和手机操作系统上实现(有统一的兼容性测试工具确保这些实现的标准符合性和兼容性),Java2平台包括三个版本,每个版本都针对不同的应用群,这三个版本具体为:✧Java2企业版(Java 2 Enterprise Edition J2EE)――用于大型的可升级的商务服务应用✧Java2标准版(Java 2 Standard Edition J2SE)――用于传统且成熟的桌面应用✧Java2小型版(Java 2 Micro Edition J2ME)――用于新一代的应用程序,主要面向消费类电子产品和嵌入式设备J2ME是Sun Microsystems Inc.针对市场日渐壮大的信息家电设备,在2000年推出的微型Java技术。
K Virtual Machine(KVM)是J2ME为了在有限的系统资源下,运行Java应用程序而设计出来的虚拟机。
对内存的需求量在Kilo Bytes等级,故此命名。
在实际操作中,KVM对于应用平台内存的需求量最少128Kbytes,在这个存储空间中包括了Java虚拟机、配置层所定义的最低需求、Java类库和程序运行所需的Heap空间。
J2ME是Sun Microsystems Inc.针对市场日渐壮大的信息家电设备,在2000年推出的微型Java技术。
K Virtual Machine(KVM)是J2ME为了在有限的系统资源下运行Java应用程序而设计出来的虚拟机。
对内存的需求量在Kilo Bytes等级,故此命名。
在实际操作中,KVM对于应用平台内存的需求量最少128Kbytes,在这个存储空间中包括了Java虚拟机、配置层所定义的最低需求、Java类库和程序运行所需的Heap空间。
二J2ME体系结构J2ME开创了无线应用的新时代,比如:多用户网络游戏、移动商务、企业的client/server应用。
J2ME移动软件程序设计第5章

china_54@
J2ME移动软件程序设计
打开Record Store:
RecordStore.openRecordStore(recordStoreName,false);
假如要打开的Record Store存在,它将被打开。如果 要 打 开 的 Record Store 不 存 在 , RMS 将 抛 出 一 个 RecordStoreNotFoundException异常。
china_54@
J2ME移动软件程序设计 5.2 Record Store
5.2.1 Record Store 概述
Record Store 等同于数据库系统中的表( table ),在 RMS中是一个包含了一系列记录的文件。 在RMS中,使用RecordStore 类来代表Record Store。 Record Store的命名规则如下:
china_54@
J2ME移blic void deleteRecord(int recordId) 当调用 deleteRecord() 时,且 Record Store 尚未打开, RMS将抛出一个RecordStoreNotOpenException异常。 假如要删除的记录id在Record Store中不存在,那么RMS 将抛出一个InvalidRecordIDException异常。 如果出现其他错误,将抛出 RecordStoreException 异常。
J2ME移动软件程序设计第1章

china_54@
J2ME移动软件程序设计
1.5.4 基于主机操作系统的三层结构图
Profiles Configuration Java Virtual Machine Host Operating System
图1-5 J2ME三层结构图 china_54@
J2ME移动软件程序设计 1.6 J2ME的一些参考网站
china_54@
J2ME移动软件程序设计 1.2各种Java版本的定位
1.2.1 Java不同版本之间的关系
Java规范中有一组类被称为核心类库(Core Class,即 java.* ) , 在 核 心 类 库 外 还 有 所 谓 的 扩 充 类 库 (Extended Class,即 javax.* )。根据对这两种类库的 支持程度,可以将Java分为四种不同的版本。
china_54@
J2ME移动软件程序设计 1.1 Java版本的演进
1.1.1 Java的演进历史
Java技术一开始叫做OAK(橡树),是专门针对嵌入 式系统而设计的产品。后来,因为Internet的快速发展,而 OAK的很多特性(如可移植性和编译后程序代码很小等) 又适合用在Internet上,因此被改名成Java。
china_54@
J2ME移动软件程序设计
1.2.3不同Java版本的虚拟机
JavaCard : JavaCard VM , 负 责 执 行 下 载 到 Smart Card上的Card Applet。 J2ME:KVM(Kilobyte Virtual Machine,千字节虚拟 机),用来执行下载到嵌入式装置和消费类电子产品 上的MIDlet。 J2SE 与 J2EE : JVM ( Java 虚拟机)和 HotSpot VM ( HotSpot 虚 拟 机 ) , 负 责 执 行 Java Applet 、 Java servlet或Java应用程序。
跟我学J2ME手机应用开发——MIDlet多线程技术及应用实例

1.1跟我学J2ME手机应用开发——MIDlet线程技术及应用实例1.1.1MIDlet线程技术1、继承Thread类类创建线程(1)MIDLetThreadDemo类代码示例package com.px1987.midletdemo.thread;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class MIDLetThreadDemo extends MIDlet {DateThread oneDateThread=null;public MIDLetThreadDemo() {}protected void destroyApp(boolean arg0) throws MIDletStateChangeException { oneDateThread=null;}protected void pauseApp() {}protected void startApp() throws MIDletStateChangeException {oneDateThread=new DateThread();oneDateThread.start();}}(2)DateThread类代码示例package com.px1987.midletdemo.thread;import java.util.Calendar;;public class DateThread extends Thread {public DateThread() {}public void run(){Calendar rightNowCalendar=null;while(true){rightNowCalendar=Calendar.getInstance();System.out.println("现在的时间为:"+rightNowCalendar.get(Calendar.HOUR_OF_DAY )+":"+rightNowCalendar.get(Calendar.MINUTE)+":"+rightNowCalendar.get(Calendar.SECOND));try{sleep(1000);}catch(InterruptedException e){System.out.println(e.toString());}}}}执行后的结果2、直接实现Runnable线程接口(1)MIDLetThreadDemo类代码示例package com.px1987.midletdemo.thread;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class MIDLetThreadDemo extends MIDlet {Thread oneDateThread=null;public MIDLetThreadDemo() {}protected void destroyApp(boolean arg0) throws MIDletStateChangeException { oneDateThread=null;}protected void pauseApp() {}protected void startApp() throws MIDletStateChangeException {oneDateThread=new Thread(new DateThread());oneDateThread.start();}}(2)DateThread类代码示例package com.px1987.midletdemo.thread;import java.util.Calendar;;public class DateThread implements Runnable{public DateThread() {}public void run(){Calendar rightNowCalendar=null;while(true){rightNowCalendar=Calendar.getInstance();System.out.println("现在的时间为:"+rightNowCalendar.get(Calendar.HOUR_OF_DAY )+":"+rightNowCalendar.get(Calendar.MINUTE)+":"+rightNowCalendar.get(Calendar.SECOND));try{Thread.sleep(1000);}catch(InterruptedException e){System.out.println(e.toString());}}}}执行后的结果3、使用Timer和TimerTask任务组合实现多线程在J2ME中,同样具有JA V A中的任务处理组合类,他们分别为Timer和TimerTask,可以使用他们实现多线程,简单说就是定时实现任务。
J2ME

通用的屏幕对象。应用程序可以在这个屏幕对象中添加、删除、修改文本、图像和简单的相 关UI组合集合。
Form(可以包含多个不同类型的控件的屏幕类)
2
用户界面的管理
Display类(管理器)
MIDP应用程序中用户界面的中心控制者。MIDP中规定每个 MIDlet程序只能拥有一个Display对象。2个主要方法:
高级用户界面
MIDP用户界面特征 MIDP MIDP界面的管理和实现 高级事件机制 高级屏幕类及其子类
1
MIDP用户界面概述
LCDUI(Limited Configuration Device UI)包的设计:
高级界面(Screen):画面具有可移植性,但无法决定组件的颜色、字体和外观。 低级界面(Canvas):编写相对复杂,但对画面的控制具有完全的控制权。 由于手机一次只能显示出一个画面,因此每个画面只能在高级API或者低级API之间择一使用。 高级API和低级API可以在同一个MIDlet中混合使用,组成应用程序中的每个画面。但是同一个画 面中,就只能使用高级或者低级API中的一个。
getDisplay():获得此MIDlet当前的Display对象。 setCurrent():将Displayable对象设置为设备屏幕上可见。
Displayable类(显示者)
虚类,有两个直接子类(Screen,Canvas),这两个类及其子类 都可以作为参数传递给Display.setCurrent(),实现用户界面 的显示。5个主要方法:
new Form(“登录演示”, items);
5
软键(Command)类
创建对象:Command exit_cmd= new Command(“Exit”,Command.EXIT,1);
1.J2ME简介
J2ME体系介绍
J2ME体系结构框图
J2ME体系结构
最下面的是操作系统,任何程序必须在操作系统 下才能运行。游戏必须在相应厂商的手机中才能运行。 操作系统上方是Java虚拟机,对于Java ME移动 开发来说,这里的Java虚拟机特指KVM(Kilo Virtual Machine),由于资源的宝贵,里面的资源分配是以 “千字节”为单位的。 在Java ME程序分为CDC和CLDC,它们的运行 机制不同,针对不同的类型,应有不同的支持。要开 发手机应用程序,在Configurations 中应该确定的是 CLDC,即要导入CLDC的支持包。 那么确定了Configurations后,是否就能进行 Java ME程序开发了呢?还不行,要知道互联受限设 备配置不可能只有手机。因此针对移动设备手机,还 必须确定是那一种,即如何确定,这就是Profiles(描 述)。只支持CLDC API是无法满足实际手机开发的, 这里SUN公司提供了专门针对手机功能的 MIDP(Mobile Information DeviceProfile)API,所以还 要导入MIDP的支持包 有些手机会额外的功能,如三维浏览,蓝牙功能, 这就是可选包(Optional Packages)。
J2ME开发环境搭建
我们使用的开发环境是:
第1章-J2ME简介
图
J2ME的体系结构
1.2.1.1 配置(Configuration)
配置规范定义了某一类设备上都适用 的Java虚拟机功能特性和Java 类库的最小集 合(核心类库)。不同配置的分类主要基于 以下几个方面的考虑:内存、显示、网络连 接和处理能力。目前可用的配置有两种:
CDC(Connected Device Configuration,连接
1.2.2 J2ME的标准化工作
J2ME实际上是一系列规范的集合,由Java Community Process (Java社区组织,简称JCP)制 定并发布相关的Java规范请求(Java Specification Request,简称JSR),各个厂商按照规范在自己 的产品上进行实现,但是必须要通过TCK (Technical Compatible Kit,兼容性测试包)测试 来确保兼容性。 有关J2ME的配置、简表和可选包都是通过JCP来定 义的,并最终以JSR来发布。
设备配置):电视机顶盒、网络电视、可视电话 等。 CLDC( Connected Limited Device Configuration ,连接有限设备配置):手机、双 向寻呼机、PDA等。
对配置的定义有三条: 一是规定所支持的Java编程语言特征; 二是规定所支持的Java虚拟机特征; 三是规定所支持的基本Java类库和API。
CDC支持设备的典型例子有电视机顶盒、支 持Internet的可视电话、高端的无线通信设备 以及汽车导航等。
CDC类库
CDC类库是支持虚拟机CVM所需要的API最 小集合,它包含J2SE中用构建和运行虚拟机 的最小集合Java包。 此外, CDC还包含了一个额外的软件包: javax.microedition.io,它包含了CLDC中定 义的所有相同的类和接口。
第1讲J2ME基本概念
J2ME简介
Sun Microsystem对J2ME的定义:
一种以广泛的消费性产品为目标的高度优化 的Java运行环境。 J2ME平台为嵌入式消费类电子产品,如移动 电话\PDA\电视机顶盒\汽车导航系统等提供 了一个通用的开发平台. J2ME的全称是Java 2 Platform Micro Edition, 即Java 2平台微型版
第一章 揭开J2ME平台的神秘面纱
解志君 E-mail: john_xzj_india@
学习目标
了解J2ME的发展历史
了解J2ME与J2EE及J2SE的联系和区别 了解J2ME的体系结构
掌握KVM
掌握CLDC与CDC,以及他们之间的区别和
联系 掌握MIDP 掌握J2ME的开发环境
是指以应用为中心、以计算机技术为基础, 软件硬件可裁剪、适应应用系统对功能、可 靠性、成本、体积、功耗严格要求的专用计 算机系统。举例来说,大到油田的集散控制 系统和工厂流水线,小到家用VCD机或手机, 甚至组成普通PC终端设备的键盘、鼠标、硬 盘、Modem等均是由嵌入式处理器控制的。
嵌入式操作系统
简档(Profile)
Kjava中的APIs是sun公司特别制订的,主要
运行于Palm OS上。 Foundation Profile 是另一种简档,主要用于 CDC设备。
J2ME的应用
移动电子商务
E-business、E-commerce、M-business与
M-Commerce 手机游戏
JAVA技术概览
J2EE为开发基于组件的多层应用程序提供了
标准. J2EE平台通过提供标准化\模块化的组 件来简化企业级应用程序的开发 与j2se\j2ee和Java Card 一样,J2ME同样包含 一个小型的虚拟机和一系列的Java API Java卡为运行在智能卡或者内存和处理器都 非常受限的设备上的应用程序提供了安全的 环境
j2me讲义
希望本教程能够助你拨开移动开发的迷雾,走入这一崭新的领域。
移动应用,未来属于你和我。
前言不知道你是否曾经有过这样的经历:一个人百无聊赖的靠在沙发上,摆弄着你的手机,企图从你的移动终端上找到除了打电话和收发短信之外,别的有趣的功能。
是的,手机等智能移动终端早已经融入了我们的生活,并成为我们不可或缺的重要工具。
每每看到有关手机销售量进一步增长的消息的时候,似乎总有什么在刺激着身为开发者的你和我的神经。
在庞大的设备群等潜在因素面前,人们似乎又看到了.net 曾经的美好时光。
然而正是被人们广泛看好的移动增值应用,却是个烫手的山芋。
很多人在徘徊。
难怪某位设备制造商的朋友在一次交流会上,半开玩笑的说,在卖场里是不会有人利用赠送java 增值应用来促销手机的,因为效果远不如“买一部手机送一斤大米”来的好。
事实证明,好的前景不会自动的变成真正的商业应用。
对年轻的移动增值产业来说,机会和陷阱同时存在。
处处充满了选择。
所以在你踏入这一新兴领域之前,请仔细思考你的机会和风险。
不过令人鼓舞的是,我们已经看到一批很有特点的移动应用供应商正在这条道路上努力的探索着,并且有些已经开始盈利。
希望你的加入能给移动应用带来新鲜的元素。
回到开发者的角度,你需要知道何时使用什么样的技术,并且你的应用需要有足够的吸引力。
本教程是讲解基于JAVA 的J2ME 技术的。
这项技术设计的初衷是为了解决在不同移动终端上运行相同的JAVA 应用。
就它的本意来说是个好点子,尽管实际部署中你还需要很多技巧。
从语言这个层次上讲,JAVA 相较C++拥有与生俱来的开发高效率,但执行效率较低的特点。
关于选择他们的争论可以持续好几个星期。
J2ME 运行效率低的问题往往被拿出来受到指责,不得不指出的是J2ME(准确的说是MIDP1.0)是广泛部署在手机上的第一代智能开发平台,很少有手机不支持这一平台。
也正是因为推出时间很早,伴随着较早一批设备本身的硬件限制,J2ME并没有完全的体现出智能应用的价值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. J2ME概述 GAWAEFC2ZMTWI2FHMNIB7BDF3TMCNQUVNYIAFVQCCR6NU2JLO4XRSIOL3INXLHIVC5AN3HF5W4 SUN公司为了能够实现应用的一处开发,处处运行,在手机的OS上构建了一个抽象层KVM,它是一种小巧的,易于移植的JVM,专门用来支持小巧的,资讯有限的设备,如手机,PDA等。这样,只要开发人员使用KVM所支持的API开发出来的应用就可以在所有预装了KVM的手机设备上运行,可以方便的使针对一款手机平台开发的游戏不需要任何的改动就能在其他厂商的手机平台上运行,J2ME游戏就是基于KVM虚拟机的应用,它的跨平台性的结构如下图:
也就是说,如果一款预装Symbian操作系统的手机开发一款游戏,可以选择Symbian提供的API直接用C++ 开发,也可以采用J2ME 进行开发,可以不做任何改动就可以直接在Symbian,Windows mobile,Linux的设备上运行。因此,手机J2ME版的游戏是游戏开发上不可失去的一个市场。 2. 手机游戏的分类 根据游戏类型划分,手机游戏分为及时战略游戏,第一人称射击游戏,角色扮演游戏,策略游戏,冒险游戏,模拟游戏,射击游戏,格斗游戏,益智游戏,赛车游戏,动作游戏,养成游戏等。 3. 手机游戏的发展现状 目前,中国的手机用户已经突破6亿大关,同时手机用户还在翻倍的增长,市场的潜力和巨大的商机已经不言而喻。目前手机用户对手机游戏的认知度和普及率已经显著提高,作为无线娱乐产业的先行者,手机游戏必在其领域内脱颖而出,手机游戏的创造性,娱乐性,互动性和用户黏性都具有绝对的先天优势,这是其他无线业务所无法比拟的。 4. 手机游戏的发展趋势 3G的推出对手机来说,客户端与服务器端的数据传输速度会更快,图像视频更加清晰流畅,社区交互更加便捷,画面显示更加夺目,这些要素的大幅度升华使得用户的游戏体验更加丰富。玩家在任何地方,都可以随时打开手机,享受手机游戏所带来的无限乐趣。 5. 手机游戏与传统游戏开发的区别
基于虚拟机的游戏,软件 SUN KVM
Symbian Palm OS Lnux Windows Mobile Android (1) 手机开发团队一般情况下只需要3-5人; (2) 开发周期一般在几个月内,传统的游戏一般要2-3年; (3) 传统游戏开发需要从控制台游戏厂商取得授权,需要支付给厂商平台使用费。在无线应用程序世界,用户可以免费地开发任何款式的游戏,而无需支付Nokia,Sun或其他平台提供商任何费用。 (4) 传统的游戏主要在软件市场上购买,而移动游戏主要由用户从移动门户网站下载并安装。 (5) 目前,很多手机设备都带有彩色屏幕,但其处理能力有限,现阶段就需要在给定的限制条件下,尽可能满足游戏玩家的要求,并吸引玩家,能在手机上运行的游戏主要有一下几类。1.低激烈程度的射击游戏;2简单街机风格的游戏;3.简单的运动类游戏;4 解谜游戏等。 6. 手机作为游戏平台的特殊性 (1) 处理能力有限 (2) 屏幕大小有限 (3) 内存配置有限 (4) 网络传输速度慢 (5) 帧处理瓶颈 (6) 颜色及Alpha通道管理有限,谨慎处理具有复杂颜色的应用 (7) 音效问题,音响效果只能支持比较简单的游戏程序 (8) 移植性问题,现在手机设备的类型相当丰富,不同的手机设备在细节上存在不同之处,因此制作一款支持多个平台的游戏是很困难的一件事情; (9) 按键操作问题,目前手机不能像计算机游戏那样支持复杂的组合键模式,这限制了游戏操作的复杂性。 7. 手机游戏设计应遵循的规则 (1) 易于学习 (2) 可中断性 (3) 丰富的社会交互,增加所玩游戏的人工只能和随机性 (4) 内容合法
void getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) Obtains ARGB pixel data from the specified region of this image and stores it in the provided array of integers.
player_custom = Manager.createPlayer(is, "audio/midi"); static Player createPlayer(DataSource source) Create a Player for a DataSource.
public boolean getHttpConnection(String url)// //建立HTTP连接 static Image createImage(int width, int height) Creates a new, mutable image for off-screen drawing.
setRefPixelPosition(destinationX, destinationY); Sets this Sprite's position such that its reference pixel is located at (x,y) in the painter's coordinate system. void removeElementAt(int index) Deletes the component at the specified index.
void setFrameSequence(int[] sequence) Set the frame sequence for this Sprite. setFullScreenMode(true);//设置全屏 Image.createImage("/Image/option.png");//获取图像文件 static Image createImage(byte[] imageData, int imageOffset, int imageLength) //把存储在 字节数组中的数据生成一个不变的图像 static Image createImage(InputStream stream) 从输入流中解码生成不变的图像 static Image createImage(int width, int height) 生成一个新的可变的图像 static Image createImage(String name) 该方法从一个给定文件路径中指定的图片生成一个不变的图像 static Image createRGBImage(int[] rgb, int width, int height, boolean processAlpha) 从一系列RGB值中生成一个不变图像 void drawRegion(Image src, int x_src, int y_src, int width, int height, int transform, int x_dest, int y_dest, int anchor) 使用该方法能截取图像的任何部分绘制到屏幕上 创建可变图像经常都需要提取该图像的大小,以及graphic对象,以便对可变图像进行修改 Image img = Image.createImage(100,100); Graphics g= img.getGraphics()获取可变图像的graphics对象 getHeight()获取屏幕的高度 getWidth()获取屏幕的宽度 isDoubleBuffered()判断是否支持双缓冲 hasPointerEvent()判断是否支持指针设备 hasPointerMotionEvents()判断是否支持指针动作 paint()绘制方法 repaint()重绘方法 getGameAction()将按键按键映射为游戏的动作 getKeyName()获取按键的名字 serviceRepaint()强制系统重绘 setFullScreenMode()控制屏幕以全屏显示 sizeChanged()当屏幕变化的时候系统调用该方法 repaint(x,y,w,h)重绘指定的区域 g.setColor()设置颜色 g.setGrayScale(int value)设置当前的灰度值 g.translate()变换坐标系来实现屏幕的滚动效果 g.getTranslateX() g.getTranslateY()获取转换坐标的原点 g.setClip(x,y,w,h)设置裁剪区域 g.setStrokeStyle()设置画笔的风格 g.drawLine(x1,y1,x2,y2); drawRect(x,y,w,h)绘制矩形轮廓 fillRect(x,y,w,h)填充矩形 drawArc(x,y,w,h,startAngle,endAngle); fillArc(x,y,w,h,startAngle,endAngle);//填充弧形 drawRoundRect(x,y,w,h,arcWidth,arcHeight); fillRoundRect(x,y,w,h,arcWidth,arcHeight); font.getDefaultFont()获取系统默认的字体 font.getFont()获取字体的一个实例 font.getFace()获取字体的外观 font.stringWidth()获取某种字体下指定字符串的预设宽度 font.subStringWidth()获取某种字体下指定的字符串的一部分子字符串的预设宽度 g.drawString(str,x,y,anchor)在制定位置绘制为本信息 g.drawChars(char[]data, int x, int y , int anchor)绘制字符数组 g.drawchar(char x,y,xanchor)绘制字符 g.drawsubString(string ,offset,len, x,y ,anchor)绘制子字符串 Manager类:该类主要是创建player接口的实例,进行声音播放和或得系统支持的声音格式 player接口:用来进行声音的播放控制,需要有manager类创建 playerListener:监听播放过程中的状态变化,根据状态的变化实现某些功能 manager.createPlayer(inputstream.string type); manager.createPlayer(locator)audio/x-wav audio/basic audio/mpeg audio/midi video/mpeg manager.getsupportedContentType(protocol)查询设备所支持的声音格式 manager.getSupportProtocols(contentType)获取所支持的协议 player.addPlayerListener();添加播放器的监听器 player.deallocate()释放被其他设备占用的稀有声音设备 player.realize()获取播放信息 player.setloopcount()设置循环播放次数 player.setMediaTime()设置媒体播放时间 player,start()开始播放 player.prefetch()获取硬件的声音播放器 GameCanvas(boolean supressKeyEvent)用来是否进制游戏按键的正常事件处理 flushGraphics()刷新屏幕 getKeyStates()获取当前的按键状态,将该函数的返回值与键值进行按位与操作就可以判断案件是否被按下 if((keyState&LEFT_PRESSED)!=0) { } gamecanvas实现runnable接口,在该类的run方法中实现游戏主循环,典型的循环就检查输入。实现 游戏的逻辑,绘制更新后的用户界面,改变游戏的状态,移图层