j2me手机游戏开发基础
- 格式:pdf
- 大小:5.08 KB
- 文档页数:3
1.1跟我学J2ME手机应用开发——J2ME概述和系统结构1.1.1与J2ME有关的术语1、3G移动相关技术目前应用在手机上的操作系统主要有Symbian 、Windows CE 、MacOSX、PalmOS和Linux 几种。
Symbian OS(中文译音“塞班系统”)由诺基亚、索尼爱立信、摩托罗拉、西门子、等几家大型移动通讯设备商共同出资组建的一个合资公司,专门研发手机操作系统。
它是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS、蓝牙、SyncML、以及3G技术。
微软Windows CE 被设计成针对小型设备(它是典型的拥有有限内存的无磁盘系统)的通用操作系统。
iPhone内置MacOSX系统,将创新的移动电话、可触摸宽屏iPod以及具有桌面级电子邮件、网页浏览、搜索和地图功能的突破性因特网通信设备这三种产品完美地融为一体。
Palm OS操作系统由Palm公司自行开发的,并授权给Handspring、索尼和高通等设备厂家,这种操作系统更倾向于PDA的操作系统。
ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。
适用于嵌入控制、消费/教育类多媒体、DSP和移动式应用等。
随着J2ME的应用,它为移动互联引入了一种新的应用模式,即手机从移动互联网上下载各种应用程序,并在手机中离线运行这些程序。
由于定义了可执行程序下载的标准,并在手机上创立了可执行环境,就形成一种新型的应用模式。
这实际正是Java语言设计最初的目标领域,但是后来在PC和服务器上得到了发展。
2、JCP与JSR(1)JCP的主要职责在于维护Java技术的发展JCP(Java Community Process) 是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新Java技术规范、参考实现(RI)、技术兼容包(TCK)。
哈尔滨工业大学摘要J2ME游戏引擎的主要作用就是根据用户的设定辅助生成一些J2ME代码框架,用户只需要去实现对应的处理函数就可以完成自己设计的游戏。
这样就可以合理重复利用已经编写好的游戏代码,做到保证游戏质量的同时尽力提高开发速度。
本文简单描述了我设计的J2ME手机游戏引擎的基本功能,同时对“WeRun”俱乐部来开发这样一个引擎的可行性做了技术和市场方面的分析。
在这些分析和设计的基础上,对整个开发流程做了初步的计划,归纳了可能用到的设计模式和基本类结构。
通过本文,让读者对J2ME 手机游戏引擎这个项目有一个概念上较为清楚的认识,同时也对于项目组的开发工作具有积极的导向作用。
关键词J2ME;手机游戏;游戏引擎- I -哈尔滨工业大学(威海)软件学院AbstractThe main function of this J2ME mobile game engine is assisting the programmers to generate some J2ME game’s frameworks according to the parameters that they set. The only thing that users have to do is accomplishing the handling functions to finish their games. So that the programmer can reasonably reuse the codes which have been written and program quickly as well as make sure the high quality. The paper mainly describes the basic functions of a common J2ME mobile game engine. And finish the feasibility analysis for the WeRun club to develop this engine. On the basis of the analysis and the design, I make a primary plan of the develop process, conclude the design pattern and class structure that will be used in the project. Through this paper, I want to make the reader have a clear awareness of the J2ME mobile game engine. To the programmers, it can guide them to develop the engine.Keywords J2ME;Mobile phone games;The game engine- II -哈尔滨工业大学(威海)软件学院目录摘要 (I)Abstract (II)第1章绪论 ......................................................................... 错误!未定义书签。
J2ME专业手机游戏开发基础游戏的基本结构游戏是什么呢?在游戏中,往往是显示各种各样的画面,玩家可以做一些设定好的控制,画面根据玩家的控制有所变化。
从这儿可以看出,游戏至少需要三个功能-显示画面,接受玩家输入和对输入产生反馈。
这就是常说的渲染,输入输出和逻辑三个模块。
将这三个模块组合在一起有很多方法。
比如事件驱动-画面保持不变直到接受到输入事件,程序进行逻辑运算然后改变画面。
而游戏往往不是这样,游戏是时间驱动的。
也就是说无论有没有输入,游戏都在不停的循环-检查是否有输入,运行逻辑,渲染画面。
这里我多说一句,其实什么样的结构并不能区别一个程序是不是游戏,其实只要可以互动娱乐的程序就可以称为游戏,也不一定要用时间驱动,但采用时间驱动是专业游戏的普遍做法,也是很容易接受的方法-因为从一定程度上讲,游戏很像电影,随着时间流逝画面在改变。
既然是时间驱动,游戏中就会有帧的概念。
所谓帧就是某个时刻显示在屏幕上的画面。
从整体上看,游戏就是一系列的帧不断播放着,像动画片一样,不过玩家可以通过交互改变播放的内容。
而我们开发游戏的主要任务就是安排每一帧的内容。
在每一次游戏循环中,我们需要搜集玩家的输入、运行逻辑以更新游戏的数据、根据更新后的数据安排下一帧显示的内容。
所以一个最简单的游戏结构就是:0 初始化游戏1 是否结束游戏(Yes:转到6)2 搜集玩家输入信息3 运行游戏逻辑4 更新下一帧,显示下一帧5 回到16 清理,结束游戏这是一个最基本的结构,特别对于比较简单的J2ME游戏来说,这个结构更加有代表性。
下面我们将分别讲述专业手机游戏如何实现这个结构中的各个内容。
游戏循环的实现我们需要一个进入后就一直循环下去直到游戏结束的结构。
线程正好可以实现。
最通常的做法是让Canvas实现Runnable接口。
于是我们就可以实现run方法。
下面是一个run方法简化版:1.public void run()2.3.{4.5. exitMidlet = false ;6.7. long startTime = 0 ;8.9. long timeCount = 0 ;10.11. gameInit() ;12.13. int curKey = 0 ;14.15. while (!exitMidlet) {16.17. startTime = System.currentTimeMillis();18.19. //acquire key20.21. acquireKey() ;22.23. //call game loop24.25. gameLoop() ;26.27. //repaint the screen28.29. repaint();30.31. serviceRepaints();32.33.34.35. frameCount++ ;36.37.38.39. //lock fps40.41. timeCount = MIN_DELAY - (System.currentTimeMillis() - startTime);42.43. timeCount = (timeCount<1)?1:timeCount ;44.45. try {46.47. Thread.sleep(timeCount);48.49. } catch (InterruptedException ex) {}50.51. }52.53. endMidlet() ;54.55.}看到我们的while循环了吗?除非在程序逻辑中设定exitMidlet为true -那是当玩家选择了退出游戏,我们的游戏将一直运行下去。
第1章J2ME 技术概述1.1 什么是J2ME1.2 J2ME平台体系结构1.3 MIDlet应用程序的生命周期第1 章J2ME 技术概述随着移动通信的突飞猛进,移动开发这个新鲜的字眼慢慢成为开发者关注的热点。
在CSDN的最近一份调查显示,有24.34%的受访者涉足嵌入式/移动设备应用开发,这个数字可能略高于实际的比例,但也足可说明嵌入式/移动设备应用开发是一块诱人的新鲜奶酪。
J2ME(Java 2Micro Edition)是嵌入式/移动应用平台的王者,Linux 和WinCE 分列二、三位。
Nokia 等厂商力推的Symbian 平台目前开发者占有率尚未达到满意水平,考虑到调查项合并了嵌入式设备(例如PDA)和移动设备(例如智能手机),Symbian、WinCE 系列在移动平台上会是竞争的主要两方。
如果厂商能在标准实现上做得更加规范,则J2ME 的跨平台特性会发挥得更加淋漓尽致,继续保有王者地位。
本章将从J2ME 的体系结构和MIDlet 应用程序模型。
1.1 什么是J2ME学习J2ME 以前知道什么是J2ME 是非常重要的。
J2ME 是SUN 公司针对嵌入式、消费类电子产品推出的开发平台,与J2SE 和J2EE 共同组成Java 技术的三个重要的分支。
J2ME 实际上是一系列规范的集合,由JCP 组织制定相关的Java Specification Request(JSR)并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK 测试,这样确保兼容性。
比如MIDP2.0 规范就是在JSR118 中制定的。
可能接触过J2ME 的开发者会觉得说J2ME 是一系列的规范不准确吧。
因为我们在开发中用到了很多例如CLDC(Connected Limited Devices Configuration)和MIDP(Mobile Information Devices Profile)等内容。
J2ME手机游戏开发技术与实践课程设计一、课程设计目标本课程设计旨在培养学生对J2ME(Java 2 Mobile Edition)手机游戏开发技术的理解与实践能力,帮助学生了解J2ME游戏开发的基本理论和技术要点,掌握J2ME游戏开发所需的工具和平台环境,并能独立完成一个小型的J2ME手机游戏开发项目。
二、课程设计内容1. J2ME介绍本课程将首先介绍J2ME的基本概念和特点,分析其在手机游戏开发中的优势和不足。
2. J2ME游戏开发工具本课程将介绍J2ME游戏开发所需的工具和平台环境,包括Eclipse集成开发环境、J2ME Wireless Tool Kit、Java SDK、Java ME Platform SDK等,让学生熟练掌握J2ME游戏开发所需的开发工具和平台环境。
3. J2ME游戏开发基础本课程将讲解J2ME游戏开发的基础知识,包括如何创建一个J2ME游戏工程、如何实现游戏的图像显示、声音播放、触屏控制等功能的实现。
4. J2ME游戏实例分析本课程将分析一些经典的J2ME游戏实例,帮助学生理解J2ME游戏开发的实现方法和技巧,同时学生将根据这些实例进行一些小型游戏的开发。
5. J2ME游戏上线和营销课程最后将介绍移动设备游戏的上线和营销策略,包括如何通过各种渠道发布和推广自己的J2ME游戏,为学生未来从事移动游戏开发,为自己的游戏营销提供参考和指导。
三、课程设计任务完成一个小型的J2ME手机游戏开发项目,完成以下步骤:1.案例选取:根据个人兴趣选定一款适合J2ME平台的游戏作为本次课程设计的开发对象。
2.游戏设计:使用MindManager或其他思维导图工具,完成游戏设计文档(GDD),包括游戏说明、界面设计、关卡设计、声音和特效设计、游戏规则等内容。
3.开始开发:在Eclipse中创建一个新的J2ME工程,按照游戏设计文档中的设计实现游戏主体框架,并逐步实现游戏的各种功能。
4.测试调试:完成游戏基本功能开发后,需要进行测试和调试,确保游戏运行正常,没有不良后果和内存泄露等问题。
J 2ME全方位开发讲解基础汇总一、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,那么在这种机型上运行的软件就不能使用双缓冲。
本文由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。