MRP开发帮助文档

1.4读者范围

各CP公司开发人员;本公司开发人员也可以参考。

二 基本功能

2.1 文字绘制的功能如何实现?是否支持描点功能?

1、绘制文字可以通过调用mrc_drawText或者mrc_drawTextEx函数来实现;

2、不支持描点功能,提供画点函数mrc_drawPointEx。 2.2 画图的功能如何实现?都支持哪些图片格式? 1、画图功能可以通过调用mrc_bitmapShowEx或者mrc_bitmapShow来绘制16bit和24bit的bmp图片,通过mrc_bmpShow函数绘制8bit bmp图片; 2、目前我们的SDK只支持bmp格式的图片,在进行mrp打包过程中,编译器对24bit的bmp图进行压缩成16bit的图片;

3、对于16bit的图片,SDK只支持565格式的;

2.3 音乐播放功能如何实现?都支持哪些音乐格式?是否支持暂停播放功能?

1、音乐播放功能通过调用mr_playSoundEx或者mrc_soundPlay函数来实现,通过调用mrc_soundStop或者mr_stopSoundEx函数来停止播放音乐; 2、目前SDK支持mid、wav和mp3等格式音乐文件;

3、SDK不支持音乐暂停播放功能,停止音乐播放以后,重新播放的时候是从头开始播放。

2.4 定时器如何使用?定时器个数有限制吗?使用的时候有哪些实现注意的?定时器会延迟吗?定时器忘记删除会有什么后果?

1、在使用定时器之前,先需要通过调用mrc_timerCreate来创建一个定时器,然后通过调用mrc_timerStart函数来启动定时器,最后通过调用mrc_timerStop函数来停止定时器,当不再使用某定时器的时候,通过调用mrc_timerDelete函数来删除定时器; 2、定时器的个数没有限制;

3、在使用的定时器的时候,需要注意定时器的时间单位是毫秒,而不是秒,定时器时间不要小于80毫秒,时间太小不会提高游戏运行速度,反而会有负面影响;

4、由于SDK平台只有一个线程在运行,整个运行过程都是串行的,只有当前的函数执行完成以后才会触发定时器事件;

5、由于定时器是通过队列管理的,当不使用的定时器没有被删除,那么定时器队列会越来越大,会影响定时器调用时间的,因此不使用的定时器需要调用mrc_timerDelete函数来删除定时器。

2.5 手机的按键、触摸屏事件如何接收?支持长按键和组合键功能吗?触摸屏是否有move事件?

1、当触发按键和触摸屏事件的时候,SDK会回调mrc_appEvent函数,开发者需要自己实现mrc_appEvent函数来处理按键和触摸屏事件;

2、SDK中按键事件有两种类型,分别为按下事件和弹起事件,没有长按键事件,也没有组合键事件,开发者可以通过定时器来模拟实现长按键事件和组合键事件;

3、SDK中触摸屏事件有两种类型,分别为按下事件和弹起事件,没有move事件。(新的移植版本已支持move事件)

2.6 游戏运行过程中是否会被打断?打断时候和游戏恢复时候是如何触发的,需要处理哪些事情?

1、游戏运行过程中,当手机来电话、短信等事情,SDK会被打断;

2、当SDK被来电等外部事件打断以后,SDK会回调mrc_pause函数,开发者需要根据具体情况实现mrc_pause函数,例如停止播放音乐;当外部事件处理完成以后,SDK会回调mrc_resume函数,开发者需要恢复游戏,例如播放音乐和刷新游戏界面;当游戏被外部事件打断的时候,定时器会被自动暂停,当游戏恢复的时候,定时器会自动恢复。

2.7 游戏如何收费?都有哪些收费方法,有什么区别?是否有包月收费接口?

1、SDK中封装了游戏收费方法,在启动游戏的时候,调用mrc_initChargeOverSea函数来初始化收费模块,在收费的时候通过调用mrc_ChargeExOverSea来收费,退出游戏的时候通过调用mrc_releaseChargeOverSea来是否收费模块资源; 2、目前游戏的收费有两种,分别是注册收费和道具收费,它们的根本区别是注册收费的时候,SDK会在磁盘上写sid文件,而道具收费不会写文件; 3、目前SDK中没有包月收费接口,开发者可以根据进行把相关付费记录写到磁盘中来实现包月。

2.8 游戏的入口函数是什么?如何退出游戏?游戏中按挂机键,是否会收到按键事件? 1、SDK的入口函数是mrc_init,开发者需要自己来实现mrc_init函数;

2、游戏中退出的方法,是通过调用mrc_exit函数来实现,当调用该函数以后,游戏不是马上退出,而是需要把当前函数调用执行完成,当开发者调用mrc_exit函数,SDK在退出游戏之前会回调mrc_exitApp函数,开发者可以在mrc_exitApp函数里面做些清除操作,例如关闭文件、释放收费模块资源等;

3、游戏中,用户按下挂机键,游戏不会收到按键事件,但是SDK会回调 mrc_exitApp函数。

2.9 手机可以使用的内存通常有多大? 游戏运行过程中如何获取内存剩余信息?

1、目前手机上可以用的内存大小通常为650KB,包括堆内存、全局数据区和栈区(stack只有4KB大小,不能定义大的临时变量); 2、游戏运行过程中,我们可以通过调用mrc_getMemoryRemain函数来获取当前剩余的内存大小,同时我们可以通过抓trace来获取内存峰值、当前剩余值和从未使用内存值:

手机总的可以使用内存值 = 内存峰值 + 从未使用内存值

在模拟器上,我们可以再trace窗口看到内存使用信息,如下所示: mem:memory stack = 384 kmem:left memory = 305 k

2.10 如何进行文件操作?功能上是否有限制?

1、SDK提供了丰富的文件操作接口,可以进行创建/打开文件、读写文件、关闭文件、删除文件,具体可以查看mrc_open、mrc_read、mrc_write、mrc_close和mrc_remove函数; 2、SDK对文件操作没有限制,开发者可以根据具体情况选择相应的接口,但是SDK对文件操作的顶级有限制的,通常限制为T卡下的mythroad目录。

2.11 文字都支持哪些编码? 支持UTF-8编码不?是否支持unicode转GB2312?

1、SDK支持unicode编码(大端)和GB2312编码,开发者可以根据需要使用相应的编码。 2、不支持UTF-8编码,开发者需要自己将unicode转换成UTF-8编码; 3、不支持unicode转GB2312功能。

2.12 SDK支持浮点运算吗?是否有三角函数?是否有绘制圆、椭圆和弧线等接口? 1、SDK 不支持浮点运算;

2、没有三角函数,开发者需要自己弄表格来实现; 3、SDK中没有绘制圆、椭圆和弧线等特殊形状接口。

2.13 SDK有随机函数吗?

1、SDK提供了随机函数mrc_sand和mrc_rand函数。

2.14 SDK是否可以联网,进行socket通信?

1、SDK提供了GPRS拨号、socket相关操作函数,并且简单封装了http协议,具体的函数可以看mrc_network.h头文件。

2.15 图片是否可以进行翻转?有相关接口吗?

1、图片可以进行翻转,SDK提供了bmp图片的上下和左右翻转接口;

2、bmp图片的翻转是通过调用bitmapShowFlip函数来实现的,该函数在mrc_bmp.h中声明。

2.16 bmp图片在运行的时候占用多大的内存? 1、bmp图片运行时候占用的内存大小与图片大小相关,占用的内存大小可以按如下方法计算:

图片占用内存大小 = 图片宽X图片高X 2 (字节)

那么一张240x320的bmp图片,所占用的内存空间大小就是240x320x2,就是150KB大小。

2.17 有发送和读取短信的接口吗?有打电话的接口可以使用吗?

1、SDK中暂时没有短信的读取和发送接口,如果开发者有特殊需求,请联系斯凯SDK开发主管李波,E-MAIL:mailto:libo@email.sky-mobi.com ,手机 13588410955; 2、SDK中没有打电话接口。

2.18 SDK运行的手机主频有多大?

1、SDK支持MTK和SPR手机平台,手机主频为50-100MHZ。

2.19 编译生成的mrp文件大小有限制吗?通常大小是多少? 1、SDK对编译生成的mrp文件大小是没有限制的; 2、通常情况下mrp文件的大小为100KB-250KB之间,

由于游戏是通过GPRS网络下载到用户手机上的,为了减少用户下载时间和提高下载成功率,开发者需要尽量减小mrp包大小。

2.20 是否有获取unicode编码长度的函数?

1、SDK中提供了获取unicode长度的函数mrc_wstrlen;

2.21 SDK中最终可以运行的是什么样子的文件?

1、编译过程中,编译器会把游戏中使用到的资源和代码都编译生成一个mrp文件,只需要把生成的mrp文件放到手机指定的目录就可以运行了,不需要安装;

2.21 是否可以获取屏幕缓冲区?缓冲区内存有多大?是否可以对屏幕缓冲区进行赋值操作?

1、SDK中提供了获取屏幕和设置屏幕缓冲区的接口,分别是w_getScreenBuffer和w_setScreenBuffer函数;

2、屏幕缓冲区的大小是与手机屏幕大小相关的,通常屏幕缓冲区的大小可以如下计算: 屏幕缓冲区大小 = 屏幕宽 X 屏幕高 X 2(字节)

例如,手机屏幕大小为240X320,那么屏幕缓冲区的大小可以是 240X320X2 = 150KB,即150KB。 3、获取的屏幕缓冲区指针是指向一块与屏幕大小相适应的内存空间,因此开发者可以对该区域内存进行直接赋值操作,但是赋值过程中需要防止出现内存越界问题,否则会出现重启、

malloc失败等严重问题。

2.22 如何使用输入法?

1、SDK中提供了调用手机内置的输入法接口,开发者可以通过调用mrc_editCreate函数来实现文字输入,得到的文字是大端unicode编码格式;

2.23 是否支持自己创建空白的图片缓冲区?是否可以获取创建图片的句柄或者画笔? 1、SDK中提供了创建bmp图片的相关接口,目前只支持创建8bit的bmp图片,不支持16bit和24bit的bmp图片; 2、开发者可以通调用mrc_bmpCreate函数来实现创建空白图片,该函数返回创建图片的句柄或者画笔,具体请查看mrc_bmp.h中函数的原型。

------------------------------------------------------------------------- 三 SDK使用注意实现

3.1全局变量使用注意事项

1、全局变量都会被清零,开发者自己赋的初值没有效果,需要在函数里面对全局变量重新赋值;

2、若需要对变量赋初始,那么需要在使用常量,即在变量前加const关键字。

3.2局部变量使用注意事项

1、由于手机的栈空间只有4KB,因此不要在函数体里面定义较大的临时变量,即临时变量不要超过256B,如果需要这么大的临时变量,那么需要通过malloc来申请堆空间,否则,当函数调用层次较深的时候,会导致栈会溢出,结果会造成手机重启;

2、在SDK编译的时候ARM编译器会进行严格的类型检查,当涉及到变量类型匹配的时候,需要做显式的强制转换,否则编译无法通过。

3、慎用char,一般用char的地方都用uint8代替。因为char类型的符号性是不确定的,MTK和SPR平台对char的符号性处理不一样,因此在使用当字节变量的时候,使用uint8或者int8来替代char。

3.3 8bit bmp图片使用注意事项 1、由于在编译打包过程,编译根据bmp图片的扩展名来区分8bit、16bit和24bit bmp图片,8bit的bmp图片,其扩展名不能是.bmp,我们通常修改为.bmp256,否则编译无法通过; 2、8bit bmp图片的绘制方法与16bit和24bit的图片不同,需要通过调用mrc_bmpShow来进行绘制。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4