sodibgJ2ME毕业论文(4)

2019-04-02 08:58

第3章 游戏设计的需求分析

3.1 MIDP中的游戏API

MIDP是专门为互联受限设备配置设计的,它为移动设备提供了一套API集合,MIDP包含用户界面类、持久存储功能与网络功能。早在MIDP1.0版本时,是没有单独的游戏API的,在MIDP2.0后增加了一个新的专门的游戏软件包Javax.microedition.lcdui.game,顾名思义,此包中定义了游戏开发的各种类型。这个软件包是一个专门为在移动信息设备上开发游戏应用而设计的,所以又叫作游戏API。[10]它里面的成员类有以下几个:GameCanvas、Layer、LayerManager、Sprite、TiledLayer。GameCanvas是提供基本的游戏界面;Layer是一个用来表示游戏中的可视元素的抽象类;LayerManager管理一系列的Layer;Sprite是一个基本的可视元素,它本身包含了许多操作,比如将一个图片切分成若干画面帧(Row Frame),再对这些画面帧编排出一个动画序列(Frame Sequence);TiledLayer是一个可以被许多图片填充的类似于表格的可视元素。[10]本论文在设计游戏过程中涉及到其中的GameCanvas类和Sprite类。[7]

3.2 游戏类构成

在游戏中,主要的一些类构成有Pocket Boxing、Boxer、Enemy、GameCanvas。其中Pocket Boxing类继承了MIDlet类,用来进行MIDlet的Live Cycle控制;Boxer存储了玩家的拳击手的信息,进行拳击手的描绘;Enemy存储电脑控制的拳击手的信息,进行拳击手的描绘,它继承了Boxer类;GameCanvas继承了Canvas类,进行画面的描绘与操作。各类都是用与类名称相同的文件名来存储的。[3]各类间的关系如图3.1。

3.2.1 Boxer类的实现

Boxer类是用来存储玩家拳击手状态的信息,再以次为根据进行描绘。Boxer类由于与用来表现对手的Enemy类大致上是相同的,所以要以继承了Enemy类为

DefaultPackage MIDlet Canvas 《Interface》 Runnable 《Interface》 CommandListener

图3.1游戏类图 Fig 3.1. Game diagram Boxer Enemy PocketBoxing GameCanvas 前提来实现。

在Boxer类的Constructor当中,会进行拳击手图像的获取。这里要准备拳击手的身体、上段防御的手腕、下段防御的手腕、上段拳击的手腕、下段拳击的手腕等五种图像。通过身体图像四种类图像的配合,就可以描绘出生动拳击手动态。 3.2.2 GameCanvas类的功能及特点

GameCanvas类是Javax.microedition.lcdui软件包中的Cavas类的一个子类,它可以为游戏提供基本的显示功能;GameCanvas类是提供了游戏的中心属性,如游戏键当前状态的能力、双缓存绘图等;GameCanvas类是一个专门的为每一个GameCanvas实例填充初始化纯白像素的缓存器;通过调用Graphics对象可以改变缓存器中的内容。[4]

3.2.3 Sprite类的功能及特点

Sprite类是一个能显示几个绘图帧(frame)中的其中一帧的基本动态层;这些帧大小相同并且由一个单独的图片(image)对象提供;Sprite类可以使许多帧连续的运动,可以使一个定制的序列以任何方式被放置;另外还可以提供转化于检测方法。下面是Sprite代码样例:[1]

import javax.microedition.lcdui.game.*; import javax.microedition.lcdui.*;

public class Text Layer extends Sprite {

Image _image; String _string; TextLayer (Image i) { super( i );}

public void draw(Graphics g ) throws NullPointerException {

Graphics.LEFT ) ; }

3.3游戏角色的处理

这里的游戏角色——拳击手的初始化是以将拳击手设为后退,并将生命值设为默认值为主要目的。

拳击手在挥出拳之后,将会在等待一段时间后恢复原本的防御状态。为了要进行这个等待处理,使用到了Tick计数。当现在的状态为上下拳击时,就会开始Tick计数,当数到4以上的状态时就会回到原来的防御位置。这样一来就可以表现出拳击手出拳头后再回到原来防御状态的样子。

不过,在后退时挥出拳击的情况中,这里不能马上回到后退状态。要在挥出拳击后回到后退状态时,就得通过玩家自己的操作来进行了。

3.4 游戏中的事件处理

事件可以分为:低层事件( low-level event )与高层事件( high-level event )。低层事件一般用来处理设备事件,如:按键事件、探针事件。高层事件用来处理应用中的相关事件,如:命令事件、组件状态变化事件。由于开发手机游戏时我们主要用到的是Key事件的处理方法,因为移动设备的键盘是传递用户意图的最主要的输入设备,Key事件属于低层事件。那么低层事件中用下面的两种方法来处理应用的Key事件。[2] 3.4.1 key Pressed方法

方法key Pressed是用来处理键被按下的事件,这个方法没有与其对应的显示的听众对象( Listener ),这些听众对象有系统根据实际对象缺省提供,例如后面提到的Canvas对象就是默认的key事件听众对象,它缺省地实现了Key Listener接口。简单的一个样例代码:

… ….

public void keyPressed (int keyCode) { if (keyCode > 0) {

//输出当前被按下键的键码

System. out.println(“keyPressed ” +( (char) keyCode ) ); } else { …

}

}

当按下手机的操作键盘上的按键时,就会触发这key事件,系统并会自动调用keyPressed()方法,并且系统将捕获到的键码传递给该方法,在上面的那段代码中方法判断了所按的按键值是否大于0,如果大于0输出所按的手机键盘上的实际值,否则执行其他的操作任务。[4] 3.4.2 key Released方法

可以说方法key Released()与上面提到的keyPressed()方法是对应的。它是用来处理手机操作键盘上的按键被释放的事件,这个方法也同样没有与之对应的显示的听众,这些听众也是由系统根据实际对象提供的。下面是一个样例代码: … …

public void keyReleased(int keyCode) { if (keyCode >0 ) { / /输出当前被释放键的键码

System.out.println(“keyReleased ” +( (char) keyCode) );

} else { … } } … …

当释放手机操作键盘上被按下的按键时,则会触发这个key事件,系统并会自动交由keyReleased()方法来处理该事件,同样的上面的这段代码中,该方法判断了所按的按键值是否大于0,如果大于0则输出所释放的手机键盘上的被按下的按键的实际键值,否则执行其他的操作任务。[4]

上面说的是在开发手机游戏过程中遇到的两种低层事件的方法keyPressed方法和keyReleased方法,下面就具体介绍“Pocket Boxing”手机游戏的开发过程。


sodibgJ2ME毕业论文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:证券期货行业简历中的自我评价及评定

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: