J2ME游戏.docx
- 文档编号:2781292
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:43
- 大小:36.13KB
J2ME游戏.docx
《J2ME游戏.docx》由会员分享,可在线阅读,更多相关《J2ME游戏.docx(43页珍藏版)》请在冰豆网上搜索。
J2ME游戏
2010年3月11日星期四庚寅年一月廿六【虎】戊寅月庚申日我要投稿会员中心【设为首页】【收藏本站】雨枫技术教程网高级搜索
TAG标签
网站地图
RSS订阅
首页JAVAWEB教程JavaScriptUnix/Linux数据库ERPPhotoShop程序设计软件工程电脑网络交流论坛本站公告:
·雨枫技术论坛正式开通!
繁體中文我要留言Struts
JAVA基础
Spring
JSF
Hibernate
JAVA网络
XML
J2ME
EJB
Javamail
开发工具
Java高级
文件操作
Java视频
调色教程
DivCSS教程
CSS布局实例
CSS教程
XHTML教程
Web标准教程
浏览器兼容教程
Apache教程
WEB工具
Html教程
JS教程
JS共享
Jquery
Prototype
Ajax
ExtJs
dojo
其它JS框架
网页特效
表单特效
JS手册
JS工具
Linux基础
Linux命令
Linux安装
Linux嵌入式
Linux编程
Linux管理
Linux内核
Linux桌面
Linux软件
BSD
RedhatLinux
ubuntulinux
Solaris
IBMAIX
SCOunix
Linux视频
MySQL
SQLServer
Oracle
DB2
数据仓库
数据库理论
ERP咨询
OA
ERP实施
ERP选型
ERP综合理论
信息化案例
信息化方案
ERP财务成本
ERP生产计划
ERP存货物流
ERP沙盘模拟
CRM
信息安全
PhotoShop基础
经典合成
调色教程
抠图教程
照片处理
鼠绘教程
文字特效
签名溶图
GIF动画
非主流
滤镜特效
创意设计
PS视频
PHP
C\C++\c#
VisualBasic
.net\Asp
Java
Shell
Perl
测试技术
项目管理
CMMI/CMM
SOA
构件与中间件
UML
软件架构
需求工程
分析与建模
配置管理
质量保证
软件过程
操作系统
网络技术
电脑应用
安全技术
软件应用
云计算
免费资源
本站公告:
·雨枫技术论坛正式开通!
繁體中文我要留言搜索
智能模糊搜索仅搜索标题搜索热门标签Windows7Windows2008云计算Office2010QQ2010C#当前位置:
主页>JAVA>J2ME>J2ME中文教程6GAMEAPIJ2ME中文教程6GAMEAPI
时间:
2009-03-1119:
14点击:
281次字体:
[大中小]
--------------------------------------------------------------------------------
-
6.1游戏API简介MIDP2.0相对于1.0来说,最大的变化就是新添加了用于支持游戏的API,它们被放在javax.microedition.lcdui.game包中游戏API包提供了一系列针对无线设备的游戏开发类由于无线设备仅有有限的计算能力,因此许多API的目的在于
www.FENGFLY.com
WwW.fengfly.Com项目管理www.FENGFLY.com
6.1游戏API简介
MIDP2.0相对于1.0来说,最大的变化就是新添加了用于支持游戏的API,它们被放在javax.microedition.lcdui.game包中。
游戏API包提供了一系列针对无线设备的游戏开发类。
由于无线设备仅有有限的计算能力,因此许多API的目的在于提高Java游戏的性能,并且把原来很多需要手动编写的代码如屏幕双缓冲、图像剪裁等都交给API间接调用本地代码来实现。
各厂家有相当大的自由来优化它们。
游戏API使用了MIDP的低级图形类接口(Graphics,Image,等等)。
整个game包仅有5个Class:
GameCanvas
这个类是LCDUI的Canvas类的子类,为游戏提供了基本的“屏幕”功能。
除了从Canvas继承下来的方法外,这个类还提供了游戏专用的功能,如查询当前游戏键状态的能力,同步图像输出;这些功能简化了游戏开发并提高了性能。
Layer
Layer类代表游戏中的一个可视化元素,例如Sprite或TiledLayer是它的子类;这个抽象类搭好了层(Layer)的基本框架并提供了一些基本的属性,如位置,大小,可视与否。
出于优化的考虑,不允许直接产生Layer的子类(不能包外继承)。
LayerManager
对于有着许多Layer的游戏而言,LayerManager通过实现分层次的自动渲染,从而简化了游戏开发。
它允许开发者设置一个可视窗口(ViewWindow),表示用户在游戏中可见的窗口;LayerManager自动渲染游戏中的Layer,从而实现期望的视图效果。
Sprite
Sprite又称“精灵”,也是一种Layer,可以显示一帧或多帧的连续图像。
但所有的帧都是相同大小的,并且由一个Image对象提供。
Sprite通过循环显示每一帧,可以实现任意顺序的动画;Sprite类还提供了许多变换(翻转和旋转)模式和碰撞检测方法,能大大简化游戏逻辑的实现。
TiledLayer
TiledLayer又称“砖块”,这个类允许开发者在不必使用非常大的Image对象的情况下创建一个大的图像内容。
TiledLayer有许多单元格构成,每个单元格能显示由一个单一Image对象提供的一组贴图中的某一个贴图。
单元格也能被动画贴图填充,动画贴图的内容能非常迅速地变化;这个功能对于动画显示非常大的一组单元格非常有用,例如一个充满水的动态区域。
在游戏中,某些方法如果改变了Layer,LayerManager,Sprite和TiledLayer对象的状态,通常并不能立刻显示出视觉变化。
因为这些状态仅仅存储在对象里,只有当随后调用我们自己的paint()方法时才会更新显示。
这种模式非常适合游戏程序,因为在一个游戏循环中,一些对象的状态会更新,在每个循环的最后,整个屏幕才会被重绘。
基于轮询也是现在视频游戏的基本结构。
6.2GameCanvas的使用
GameCanvas类提供了基本的游戏用户接口。
除了从Canvas继承下来的特性(命令,输入事件等)以外,它还提供了专门针对游戏的功能,比如后备屏幕缓冲和键盘状态查询的能力。
每个GameCanvas实例都会有一个为之创建的专用的缓冲区。
因为每个GameCanvas实例都会有一个唯一的缓冲区。
可以从GameCanvas实例获得其对应的Graphics对象,而且,只有对Graphics对象操作,才会修改缓冲区的内容。
外部资源如其他的MIDlet或者系统级的通知都不会导致缓冲区内容被修改。
该缓冲区在初始化时被填充为白色。
缓冲区大小被设置为GameCanvas的最大尺度。
然而,当请求填充时,可被填充的区域大小会受限于当前GameCanvas的尺度,一个存在的Ticker,Command等等都会影响到GameCanvas的大小。
GameCanvas的当前大小可以通过调用getWidth和getHeight获得。
一个游戏可能提供自己的线程来运行游戏循环。
一个典型的循环将检查输入,实现游戏逻辑,然后渲染更新后的用户界面。
以下代码演示了一个典型的游戏循环的结构:
//从后备屏幕缓冲获得Graphics对象
Graphicsg=getGraphics();
while(true){
//检查用户输入并更新位置,如果有需要
intkeyState=getKeyStates();
if((keyState&LEFT_PRESSED)!
=0){
sprite.move(-1,0);
}
elseif((keyState&RIGHT_PRESSED)!
=0){
sprite.move(1,0);
}
//将背景清除成白色
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
//绘制Sprite(精灵)
sprite.paint(g);
//输出后备缓冲区的内容
flushGraphics();
}
6.2.1绘图
要创建一个新的GameCanvas实例,只能通过继承并调用父类的构造函数:
protectedGameCanvas(booleansuppressKeyEvents),
这将使为GameCanvas准备的一个新的缓冲区也被创建并在初始化时被填充为白色。
为了在GameCanvas上绘图,首先要获得Graphics对象来渲染GameCanvas:
protectedGraphicsgetGraphics()
返回的Graphics对象将用于渲染属于这个GameCanvas的后备屏幕缓冲区(off-screenbuffer)。
但是渲染结果不会立刻显示出来,直到调用flushGraphics()方法;输出缓冲区的内容也不会改变缓冲区的内容,即输出操作不会清除缓冲区的像素。
每次调用这个方法时,都会创建一个新的Graphics对象;对于每个GameCanvas实例,获得的多个Graphics对象都将渲染同一个后备屏幕缓冲区。
因此,有必要在游戏启动前获得并存储Graphics对象,以便游戏运行时能反复使用。
刚创建的Graphics对象有以下属性:
l渲染目标是这个GameCanvas的缓冲区;
l渲染区域覆盖整个缓冲区;
l当前颜色是黑色(black);
l字体和调用Font.getDefaultFont()返回的相同;
l绘图模式为SOLID;
l坐标系统的原点定位在缓冲区的左上角。
在完成了绘图操作后,可以使用flushGraphics()方法将后备屏幕缓冲区的内容输出到显示屏上。
输出区域的大小与GameCanvas的大小相同。
输出操作不会改变后备屏幕缓冲区的内容。
这个方法会直到输出操作完成后才返回,因此,当这个方法返回时,应用程序可以立刻对缓冲区进行下一帧的渲染。
如果GameCanvas当前没有被显示,或者系统忙而不能执行输出请求,这个方法不做任何事就立刻返回。
6.2.2键盘
如果需要,开发者可以随时调用getKeyStates方法来查询键的状态。
getKeyStates()获取游戏的物理键状态。
返回值的每个比特位都表示设备上的一个特定的键。
如果一个键对应的比特位的值为1,表示该键当前被按下,或者自上次调用此方法后到现在,至少被按下过一次。
如果一个键对应的比特位的值为0,表示该键当前未被按下,并且自上次调用此方法后到现在从未被按下过。
这种“闭锁行为(latchingbehavior)”保证一个快速的按键和释放总是能够在游戏循环中被捕获,不管循环有多慢。
下面是获取游戏按键的示例:
//获得键的状态并存储
intkeySta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- J2ME 游戏