J2ME游戏.docx

上传人:b****5 文档编号:2781292 上传时间:2022-11-15 格式:DOCX 页数:43 大小:36.13KB
下载 相关 举报
J2ME游戏.docx_第1页
第1页 / 共43页
J2ME游戏.docx_第2页
第2页 / 共43页
J2ME游戏.docx_第3页
第3页 / 共43页
J2ME游戏.docx_第4页
第4页 / 共43页
J2ME游戏.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

J2ME游戏.docx

《J2ME游戏.docx》由会员分享,可在线阅读,更多相关《J2ME游戏.docx(43页珍藏版)》请在冰豆网上搜索。

J2ME游戏.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1