目标手机软件
手机网游制造之
游戏界面篇
开发程序:疯狂的
开发进度:第一期
本期要点:设计客户端游戏功能
开发平台:Java平台
从3G中受益的行业,一定少不了手机网游,手机网游应该怎么开发呢?跟PC平台上的游戏开发一样吗?别急,跟随我们开发一个手机网游,你就什么都明白了。本期我们先讲客户端的游戏功能。
手机网游前景光明
国内的手机网络游戏最早出现在2004年,最初由3人团队开发并运营的休闲网游——《移动玩家》系列。第一个公司开发的手机网游是《三界传说》。手机网游发展到如今已经有几十款手机网游上线运营了。易观Enfodesk发布的《2009年第1季度中国手机网游市场季度监测》数据显示,2009年第1季度中国手机网游用户规模达330万,环比增长16%。
小提示:手机游戏门户网站当乐网2008年的调查显示,目前的手机网游用户中,学生(38.4%)、公司职员(21.3%)、工人(12.8%)及军人(3.7%)占比合计达76.2%,他们是时下手机网游的主体消费者。在年龄上,15岁至25岁的用户成为手机网游消费的主体,占比近90%。
困扰手机网游发展的因素有三个:网络速度、网络费用昂贵和体验性差。随着3G的快速发展,手机的网络传输速度将得到极大的提升,网络费用也会在将来降下来。有了传输速度的保证,游戏会做的很细化、功能更强,自然体验性也会更好。在今年的ChinaJoy展会上,还特别设立了手机网游专区,可见它的前景十分光明(图1)。
Java ME技术由于支持的手机广泛,开发人员众多,在整个手机网络游戏开发技术中占据主导地位,随着MIDP3.0规范的推出,Java ME技术将成为最主要的开发手机网络游戏技术。
客户端游戏功能设计思路
手机网络游戏和普通的网络程序一样,在实际设计时都分为客户端和服务器端两个部分进行开发。开发客户端,主要包含界面设计、用户操作控制和网络传输三部分。开发服务器端,则主要包含网络传输、数据存储和核心逻辑三部分。所以网络程序和一般程序的不同就是将单机程序的数据和逻辑处理部分移动到服务器端,然后通过网络传输和客户端进行数据交换,从而实现程序的功能。
《疯狂的》是一款类似《人》的双人对战小游戏。本游戏包含两个界面(图1):等待界面和游戏界面,等待界面比较简单,界面为一个闪烁的文字。游戏界面是程序的主界面。由于界面中包含的元素很多,所以对于界面采用分层绘制的思路:首先绘制包含背景块的背景层,然后绘制障碍物层,最后绘制人物和等。
而对于用户的操作控制,客户端先要做一些基础的判断,然后将用户操作转换为一定的格式发送给服务器端,由服务器端判断是否可以操作,客户端程序根据服务器端的处理结果来确定操作是否成功。
状态机机制讲解
由于需要在程序中实现两个界面:等待界面和游戏界面,为了简化逻辑的处理,将这两个界面编写在一个代码的内部,这就需要使用界面开发中一种常用的控制机制——状态机机制。
状态机机制的实现原理是:使用一个int状态变量控制显示哪个界面,例如该变量的值为0时显示等待界面,该变量的值为1时显示游戏界面,这样就可以通过控制该状态变量来实现界面的显示和切换了。
使用状态机机制可以很方便的在一个代码的内部制作多组界面,可以让代码的结构变得十分清晰。此外,还需要考虑对复杂的界面进行分层处理。分层处理是指将逻辑处理相同的元素划分为一层,类似PhotoShop中层的概念,例如将起装饰的背景块组成背景层,将参与碰撞处理的部分组成碰撞层等,而人物需要单独处理成一层。
这种处理的思路不仅使得界面绘制结构清晰,更重要的是使逻辑处理简单化,从而可以开发更复杂的界面程序。状态机机制,在复杂程序中用得较多,特别是手机网游程序,有志于这方向的朋友一定要掌握它。
本程序中的实现代码为:
/** 界面控制状态值 */
int status;
/** 等待界面 */
final int WAITING_SCREEN = 0;
/** 游戏界面 */
final int GAME_SCREEN = 1;
在代码的各个方法中,根据变量status的值进行不同的逻辑处理,从而实现状态机机制。
客户端游戏功能设计步骤
第一步:创建项目
启动Eclipse环境,选择“File→New→J2ME MIDlet Suit”,设置项目名称为“Bomber”,并一路选择“Next”, 完成项目的建立。然后新建一个J2ME入口类,选择“File→New→J2ME MIDlet”,并设置名称为“BomberMIDlet”,点击“Finish”。创建项目的代码下载地址是http://www.shudoo.com/bzsoft。
第二步:设计界面
选择“File→New→Class”,并设置名称为“BomberCanvas”,点击“Finish”完成界面类的创建。接着,开始初始化界面。关键码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):
protected void paint(Graphics g) {
switch(status){
case WAITING_SCREEN:
paintWait(g);
break;
case GAME_SCREEN:
paintGame(g);
break;
第三步:按键处理
在上面的界面类中,编写事件处理的代码,实现按手机键盘上按左软键退出,按上下左右键移动,以及按确定键释放。核心代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):
public void keyPressed(int keyCode) {
switch (status) {
case WAITING_SCREEN:
keyPressed_wait(keyCode);
break;
case GAME_SCREEN:
keyPressed_game(keyCode);
break;
第四步:运行程序
在Eclipse主界面左侧的“Package Explorer”中,选中项目源代码BomberMIDlet.java,单击鼠标右键,选择“Run As→Emulated J2ME Midlet”即可运行程序(图3)。
等待界面 游戏界面
读者反馈
开发QQ群:咨询一个技术问题,怎么才能让CEikRichTextEditor的背景变透明?
小编:在S60 3rd 中,若要使CEikRichTextEditor的背景变透明,可以从CLafEdwinCustomDrawBase 继承出一个类,如 class CMyEditor : public CEikRichTextEditor, public CLafEdwinCustomDrawBase{},然后重写DrawBackground函数,在DrawBackground函数中加入绘制透明背景的代码即可。
开发QQ群:我的程序做好了,却碰到一个难题,如何将程序的图标添加到主界面中?
小编:要将程序的图标添加到主界面中,需要专门开发一个特定的今日插件。SDK内提供了一个示例程序:\Windows Mobile 6 SDK\Samples\PocketPC\CPP\win32\memwatcher。
开发QQ群:我听到群里面的兄弟经常说“WAP”,它是个什么东东?我比较菜,希望帮帮我。
小编:WAP即无线应用协议(Wireless Application Protocol),是一种向移动终端提供互联网内容和先进增值服务的全球统一的开放式协议标准, 是一种简化了的无线Internet 协议。WAP 将Internet和移动电话技术结合起来,使随时随地访问丰富的互联网络资源成为现实。
开发QQ群:请教一下,MIDP1.0中如何获得整个屏幕的高度和宽度。
小编:使用Java ME 开发的手机程序,可以使用Canvas类中提供的getWidth()和getHeight()这两个函数来获取屏幕的宽度和高度。
读者问题:我使用的是PPC手机,日历、任务功能对我很重要。直接在手机上添加日历或任务很不方便,需要双手操作,还有很多选项。能不能在通话记录或联系人的菜单中添加一个命令,可以一键设定与所选联系人关联的日历或任务?
高手 图图:动态添加菜单可以参考SDK提供的示例程序:\Windows Mobile 6 SDK\Samples\PocketPC\CPP\win32\Dynamenu,MSDN上也有更详细的解释:http://msdn.microsoft.com/zh-cn/library/s765c671(VS.80).aspx。联系人、日历、任务等的操作可以使用原生的POOM方式,也可以使用.Net CF 里提供的Microsoft.WindowsMobile.PocketOutlook命名空间下的相关方法。
读者问题:手机开发中有支持移动定位技术的吗?
你是手机编程的高手吗?你能解答上面这位读者的疑问吗?不要犹豫,来我们这里展示一下你的风采吧,来信请发到[email protected](也可以给我们发送问题)。
第七个QQ群: 72407081,验证码:手机开发。欢迎对手机编程感兴趣的朋友加入。
(陈跃峰 谭剑)