在移动游戏开发领域,开发者面临着各种挑战,其中之一便是如何高效地将游戏适配到不同的平台和设备上。不同的平台使用不同的编程语言、框架和API,这给开发者带来了不小的困难。例如,iOS平台使用Objective-C,Android平台使用Java,Windows Phone 8使用C#,而BlackBerry则使用C++。此外,每个平台都有自己独特的服务实现方式,如应用内购买,以及制造商对这些服务的实现方式也各不相同。性能优化、开发设备的选择、测试和维护也是跨平台开发中需要考虑的问题。
跨平台开发的主要挑战包括:
上述因素代表了风险和成本的增加,这是移动游戏开发者需要避免的。
为了解决上述问题,开发者可以转向跨平台开发系统。Marmalade C++是MarmaladeSDK的核心,它直面并解决了上述所有问题:
Marmalade C++已经发展成为一个可靠、稳定且用户友好的产品,支持包括:
MarmaladeC++框架完全基于C/C++,并通过各个API提供对设备子系统的访问。以下是一些示例:
示例1 - 加载图像文件并绘制2D精灵:
CIw2DImage* image = Iw2DCreateImage("candy_gem.png");
Iw2DDrawImage(image, CIwFVec2(x, y), CIwFVec2(width, height));
Marmalade可以直接从存储中加载多种不同的图像格式。
示例2 - 加载3D模型、材质和纹理并渲染:
CIwResGroup* group = IwGetResManager()->LoadGroup("my_model.group");
CIwModel* my_model = (CIwModel*)group->GetResNamed("my_model", IW_GRAPHICS_RESTYPE_MODEL);
CIwFMat transform;
transform.SetRotY(rotation.y);
transform.ScaleRot(scale);
transform.SetTrans(position);
IwGxSetModelMatrix(&transform);
my_model->Render();
Marmalade将3D模型及其相关数据存储在方便的资源组中,允许相关资源一起加载和卸载。
示例3 - 播放流媒体音乐:
if(s3eAudioIsCodecSupported(S3E_AUDIO_CODEC_MP3))
s3eAudioPlay("background_music.mp3");
Marmalade支持播放多种不同的音频和视频格式。
示例4 - 读取加速度计:
int x = s3eAccelerometerGetX();
int y = s3eAccelerometerGetY();
int z = s3eAccelerometerGetZ();
Marmalade支持多种输入设备,包括加速度计、指南针、触摸、键盘等。
示例5 - 进行应用内购买:
IwBilling::Init("public_key", IwBilling::BILLING_VENDOR_GOOGLE_PLAY);
IwBilling::PurchaseProduct("product_id");
Marmalade支持包括苹果应用商店、谷歌Play、亚马逊应用商店、三星应用商店、黑莓应用世界等在内的多种应用商店。
Marmalade Hub是一个工具,它以平台独立的方式集中了以下功能:
这消除了使用makefiles和构建脚本以及跨不同工具集工作的需求。Marmalade Hub还检查用户系统上的依赖关系,以确保一切都已安装并运行。
Marmalade模拟器是一个工具,它使开发者能够在桌面上直接以全速测试他们的创作,提供了一个可以大大加快开发速度的快速测试环境。
模拟器具有许多有助于开发和测试的功能,包括模拟各种输入设备、屏幕分辨率/方向、内存大小、音频等。模拟器还支持指标,使开发者能够看到内存分配/释放、API调用和GL调用等事件的发生频率。
MarmaladeSDK不使用任何解释器或VM,所有代码都编译并针对目标处理器(ARM、x86和MIPS)进行优化,为2D和3D游戏提供超快速的每秒60帧的游戏体验。