Introduction
在这里,开发平台(Platform)指的是我们(Programmer)看到的手机,包括系统结构,编程接口(API)等。
以下是我们主要的手机游戏开发平台及其概述:
q Java (J2ME)
Ø 开发语言本身的复杂度低
Ø 不同手机系列的平台差别大,所以移植难度大
q BREW
Ø 比Java手机的开发平台更规范
Ø 测试步骤繁琐难度大
q Symbian
Ø 大容量和高性能
我们的大部分项目都是在Java平台上开发的,而Symbian的项目则非常少。
Java (J2ME)
Compiler
Preprocessor
预处理,进行多个平台的并行开发时使用。
有Gameloft自己写的polka, glopp,gcc里的cpp,MS的cl
J2SE javac
Build Process
Compile à
Obfuscate à
扰码可以anti decompile并且缩减容量
Preverify
标准Java 的可执行class à 特定KVM的可执行class
Pack
Resource packing
Ant (请参照其他项目的ant模版来构建你的项目)
Jad (请参照Gameloft的相关规范)
Jar(包括所有的可执行class和运行过程中需要的资源)
IDE
JBuilder
Eclipse
It’s FREE!!!!!
Install
OTA下载(请咨询Testers)
本地(数据线/红外/Bluetooth)
以下讲一些重要的Java手机系列和他们各自的性能特点等
各个系列都会给出代表机型,具体规格请在网上查找。
Nokia Series 30
代表机型3510i
性能普通,内存少/容量小,所幸屏幕也很小96X65,可能是屏幕最小的一款彩屏手机了,所以对于程序员来说,移植难度并不是最大的。
屏幕尺寸越大,游戏需要的内存和容量也越大,对性能的要求也会增加,所以屏幕尺寸对移植难度的影响是很大的。
Nokia Series 40
代表机型7210
移植难度大,因为性能,内存/容量和30系列一样,但是屏幕大了很多128X128。
以上两个系列手机有一个共同的优点,就是开发环境比较完善。体现在手机KVM的Bug很少,模拟器也比较能真实的反映真实设备上的运行状况,内存状况也能够比较准确的跟踪。
Nokia Series 60
代表机型7650
性能好,内存/容量大。
缺点是手机KVM的Bug比较多在编程的时候请参考Gameloft Nokia Series 60 Bug列表及解决方法。
Nokia UI API
早期Nokia的系列手机,都是基于MIDP1.0的平台。因为标准API功能不足,Nokia提供了增强的API供游戏开发之用。包括了绘图(翻转/绘制点阵/多边形/三角形),震动,声音等。这些API足以应付一般情况下的2D游戏开发。
其中最重要的是绘图功能的增强。翻转意味着可以节省50%以上的图像资源。绘制点阵意味着可以直接更换调色版。因为这些API,内存和容量的使用效率得到了很大的提高。
其他MIDP1.0的手机
代表机型 GX系列 Sanyo系列 SonyEricsson系列
这些手机的移植难点各不相同,但是因为MIDP-1.0的局限性,难度都比较大。
其中有些手机的移植是非常有特点的,比如SE的T610/620,请参考Gameloft Beijing论坛里相关的主题。
这些手机都会面临的问题是图片的翻转和换调色版,因为MIDP-1.0完全不支持,所以都要自己实现,相关的代码已经非常成熟了,可以从其他项目里考。
任务:我们只有一张图a, ß 但是我们要画b,à
但是因为资源容量的限制,不能再加入一张图b了。
所以需要在内存里创建出b。
同样,我们如果需要画c, ß
也需要在内存里创建出来。
条件:在MIDP-1.0有限的API里有函数createImage(数据)
方法:把图像文件内容读取到一段缓存里,
因为PNG的格式是已知的 (RFC2083),
所以可以得到调色版和索引的点阵数据,
然后就可以对此进行想要的变换。
调用createImage(变换后的缓存里的数据)
MIDP-2.0的手机
代表机型Moto Triplets / Sagem MyV65 / Nokia 6600 / Alcatel 535 735
MIDP-2.0功能比1.0强大了很多,支持图像变换,声音播放等。所以一般来说,手机厂商不再为了支持声音等功能提供自己的API。并且大多数支持MIDP-2.0的手机内存和容量都比较大。所以移植的难度不大。
Doja
代表机型NEC N341i Mitsubishi M341i
Doja与J2ME的差别比较大:
用JAM而不是Jad
Jar不能超过30K(代码)
Scratchpad(资源/大概只有100k)
没有SetClip(所以要实现切成小块)
图像资源是GIF格式而非PNG格式
开发的难度大,并且很多时候需要GD和美工的配合。
Doja的开发一般也需要换调色版和翻转图片,方法同MIDP-1.0,只不过是把缓存里的数据构建成合法的GIF(在MIDP-1.0里是PNG)资源数据流。
Java 3D
SonyEricsson K700
API Mascot3D
(JSR184 on some other devices)
Still under research on some part of the 3d engine.
BREW
Compiler
ARM c/c++ compiler
我们用过ADS1.2,希望能用到gcc的ARM7 cross compiler
Pack
Mif
申请class id
这是一个类似jad/jam的程序说明文件
更多的规定请参照联通的测试标准
Mod
程序 J
DLL
程序 too 不过这个是在Windows环境里
用Win32的Compiler编译好的Win32 DLL
仅限用于模拟器
Resource packing
可以把Resource 打成一个或多个包
Save (?)
必要!需要一个有正确初始值的Save文件
sig
并不是在release package里出现的
IDE
MSVC
BREW提供了足够进行正常开发的有用的VS插件
同时,模拟器在VS里的设置和运行也很容易
(相当于启动一个进程,调试一个Additional DLL)
Test
TBT
True BREW Test
UBT
Unicom BREW Test
Memory Allocation
BREW测试一般都会挂在Memory Allocation上
所以我们要自己管理内存的使用和分配
请参考Gameloft BREW 游戏引擎 by Zhengjiesheng
BREW 1.0
代表机型 LG4400 T720
BREW 2.0
代表机型LG6000
在BREW项目里,内存/容量一般不是瓶颈。一般造成移植难度比较大的是系统性能的低下。这点在早期BREW1.0的手机种更为显著。
优化性能的办法一般有(除了正常的优化措施以外),改写/优化调用比较多的系统调用,比如我们的LongCopy。等等。
Native Bitmap
更详细的内容请参考Gameloft BREW 游戏引擎
BREW 1.0的平台不支持IDIB接口,所以我们无法直接从接口得到NativeBitmap点阵的指针。所以我们可以构建一个Windows Bitmap然后用CONVERTBMP 把他转换成Native Bitmap的指针。
如果是BREW2.0可以通过IDIB很容易的得到NativeBitmap的数据地址
IDIB->pBmp
Symbian
代表机型 7650 N-Gage
因为相关项目比较少,所以我们只介绍Nokia60系列的Symbian平台
SDK
Series60
N-Gage
用Wizard创建Symbian项目
Build
Makefile – mmp
Abld bldmake
Pack
AIF
RSC
CAPTION.RSC
APP
Resource Packing
IDE
MSVC