MRP开发帮助文档 下载本文

内容发布更新时间 : 2024/5/3 7:59:39星期一 下面是文章的全部内容请认真阅读。

3.4 bmp图片宽高注意事项

1、SDK对图片的宽度有限制,不能超过1000个像素大小,否则图片会出现加载失败,对图片的高度没有限制。

3.5 SPR平台游戏音乐使用问题 1、由于SPR平台对音乐支持不完善,游戏过程中播放音乐不流畅,因此开发者需要注意,SPR平台游戏不需要添加音乐播放功能,游戏代码中可以通过MR_SPREADTRUM_MOD宏来区分MTK和SPR平台,当是SPR平台的时候,MR_SPREADTRUM_MOD该宏会被自动定义的。

3.6 C语言标准库函数使用问题

1、SDK中封装了常用的C语言标准库函数,例如memcpy等,详细函数可以查看 mrc_base.h里面,如果开发者需要是否其他的库函数,那么需要先联系斯凯工程师,不是随便使用SDK中没有封装的函数,否则会出现异常。

3.7 mrc_exit函数使用注意事项

1、SDK中通过调用mrc_exit函数退出游戏,当调用该函数以后,游戏不会马上退出,而是需要执行完当前函数才会退出的,因此需要在调用mrc_exit函数以后再添加return语句,举例如下:

void Test(void) { //?

mrc_exit();

return;//这里必须调用return,否则后面的语句会继续被执行 //other }

3.8 本地UI窗口创建使用注意事项

1、SDK提供了简单的窗口系统管理,在mrc_win.h里面,

当开发者在mrc_winNew里使用了本地UI的相关资源,那么如果想在当前窗口之上创建新的窗口,那么就不能再使用mrc_winNew来创建新窗口,必须使用mrc_platWinNew函数来创建新的窗口,否则窗口事件函数无法正常收到按键和触摸屏等事件。

四 常见问题原因和解决方法

4.1 游戏中为什么会出现花屏?有什么解决方法?

1、游戏中当图片加载失败的时候,开发者如果没有对这种情况进行判断,而继续绘制图片,那么就会出现花屏现象;

2、解决花屏问题,需要查找图片加载失败的原因,通常图片加载失败的原因有如下几种: 1传入的参数错误;

2 mrp包里面不存在相应的文件; 3 内存不足;

4 图片宽度超过1000个像素大小; 因此,针对上述原因,解决方法如下:

1 检查代码,确定函数调用时候传入的参数,修改错误参数; 2 将要加载的图片打包到mrp文件里面; 3 当出现内存不足的时候,一种情况是同一时间加载到内存的图片太多了,没有足够内存了,开发者可以通过写文件,把当前的剩余内存空间大小保存下来;另外一种情况是游戏代码有问题,例如出现数组越界、释放非法指针,把内存空间搅乱了,就需要查看游戏代码了; 4 图片宽度超过限制的,只能修改图片。

4.2 游戏中为什么会出现死机和重启?有什么解决方法?

1、当游戏代码中出现死循环、内存越界、使用野指针和空指针时候,手机就会出现死机或者重启等严重异常现象;

2、死机和重启的解决方法:

1 查找代码中所有数组,确保使用过程中不会出现数组越界问题;

2 查找代码中所有malloc地方,对malloc的返回值必须进行判断,当malloc失败的时候,必须进行处理,不能简单继续执行,通常是调用mrc_exit退出游戏,并且在mrc_exit函数后面,调用return退出当前函数;

3 查找代码中所有的free的地方,free的对象必须是合法的地址; 4 查找代码中for循环,确保循环是可以退出的,不会进入死循环;

5 查找代码中所以内存操作函数,如memcpy、memset,确保调用该函数的时候,内存地址是合法的,并且长度参数没有越界;

6 查找代码中字符串操作函数,确保所操作的字符串是合法的,并且长度等参数是否合法,如strcpy、strlen、strcat、strstr等。

7 查找代码中调用mrc_readFileFromMrpEx等类似SDK需要分配内存的函数,是否对这里函数的返回值进行判断,如果此类函数调用时候,游戏还继续进行,那么可能存在使用空指针情况。

4.3 游戏中内存申请为什么失败?

1、手机上的内存空间是非常有限的,通常情况下手机可以使用的全部内存大小为650KB,当使用malloc函数分配内存时候,如果传入的参数值太大,那么系统没有足够的内存,那么就会出现申请失败;

2、当游戏当中频繁调用malloc和free函数,那么系统就可以会产生内存碎片,那么开发者再次去malloc的时候,就可能失败,因此在游戏当中应该尽量减少malloc和free的调用次

数;

3、游戏当中当前可用的内存足够,如果代码中有内存越界,搅乱可用的内存布局,那么也会出现malloc失败情况。

4.4 编译的时候为什么会提示Authorization timeout? 1、提示Authorization timeout的原因如下:

a 使用了未授权的网卡,请确定当前的网卡是否是经过授权的,如果是两张网卡,只有一张是授权过的,请禁用没有授权的那张网卡;

b 请确保当前windows登录用户是授权时候的用户,如果不是,请注销当前用户,使用授权时候的用户登录windows;

c 由于SDK的授权是有时间限制的,电脑的时间是否修改过了,如果时间修改过了,请恢复先前的时间试试看。

4.5 运行mrp文件的时候为什么会提示找不到can't find sdk key? 1、手机上运行mrp找不到key的解决方法

a 该手机是否有key文件,如果没有,那么这种情况是正常;那么请联系斯凯SDK开发主管李波,E-MAIL:mailto:libo@email.sky-mobi.com ,手机 13588410955,获取手机key文件; b 如果该手机有key文件,请确认key文件存放的位置是否正确;

如果key文件正确,并且先前都是可以正常运行的,建议你重新开机,然后等待2-3分钟之后,再进入游戏;

2、模拟器上运行mrp找不到key的解决方法

请找到模拟器的目录,模拟器的目录通常是simulator,找到模拟器目录下的DEBUG目录,并找到config.ini文件,如下图所示:

打开改文件,将里面的manufactory和type的值都修改为sdk,如下如所示:

或者双击这个文件 然后覆盖一下。

4.6 为什么使用串口线无法抓到trace信息? 1、确定是否装好trace线驱动程序;

2、确定抓trace软件Catcher.exe中的设置是否正确,包括端口、数据库文件和Filter设置;

3、确定手机端串口设置是否正确,按*789#进入工程模式设置;

4、当手机和trace软件都设置正确,并且串口已经处于工作状态,那么无法抓到trace信息的原因是由于游戏对cpu占用率太高了,手机操作系统打印trace的线程无法得到运行时间,那么请修改游戏中的定时器时间,修改为200ms,然后再试试。

4.7 为什么在模拟器上运行的游戏非常流畅而在手机上运行时候速度非常慢?有什么解决方

法?

1、由于PC和手机的运行环境有比较大差别,PC的CPU主频1G-2GHZ,而手机的CPU主频为50M-100MHZ,二者性能相差巨大;

2、如果游戏运行速度过慢,那么游戏的速度就需要优化,优化的思路如下:

a 游戏中加载图片和绘制需要消耗比较多的时间,需要考虑如何减少加载和绘制操作; b 简化游戏逻辑,精简多余的绘制操作。

4.8 测试二次确认通道的时候,现在都需要等很久,30秒以上才能收到短信,上个月不会,是不是SDKv1.0.3.23有什么改变导致的?试了2张卡,一张全球通,2秒就收到短信,一张神州行,要30秒才收到,都不是错误指令。

答:这个应该是中国移动的原因,所以要Excel中可以修改等候时间,我们实际运营时会视情况修改这个等候时间长短。

4.9 积分查询时,手机出现假死的现象,如何解决?

答:在积分查询的时候,可以适当调大游戏的定时器时间。

4.10 i18n的SGL_LoadString函数,在飞航模式下会有问题。

答:把mrc_exit()提到#endif前面,或者直接删除。以下是示例代码:

4.11编译时出现“Undefined symbol mrc_appEvent”的error错误信息,怎么处理? 答:之前的一些SDK使用mrc_event这个函数名,后面的SDK将这个函数名改成了mrc_appEvent。所以只要把mrc_event函数的名称改为mrc_appEvent,然后重新编译即可。

4.12分包的游戏,在编译SPR版本的时候,提示“Endianness mismatch”,可能是什么问题? 答:编译SPR的lib的时候,没有加bmp_mode=spreadtrum。

4.13展讯的手机,是否需要做积分上传?

答:展讯手机的部分机型是不支持积分上传的,所以展讯版本不需要做积分上传。

4.14道具收费,发送成功以后,需要等待用户确认,还是自动返回游戏? 答:可以显示了发送结果以后,然后自动返回游戏。

4.15 mpr工程文件里的RAM值如何填写?

答:这个值是指这个游戏,运行时所需要的内存大小。例如:

TMG2_ZY2_START_GMGGZ_SPR_600K_240X320_24_5N_AL_V104_0225.mrp

指这个游戏,能够在VM内存为600K和600K以上的手机上运行。 这个值可能通过在手机上运行一遍游戏,然后看内存的峰值内存,在这个峰值内存的基本上,加上30K,然后以50K为基数,余数不到50K的,进为50K。

例如:游戏的峰值内存是540K,加上30K,为570K,则MRP包上应该标识为600K。

4.16 手机上怎么样进行调试?

答:目前手机上调试的方法主要有两种: 1、用软件抓TRACE,可参考相关的文档。

2、应用写LOG文件,在需要调试的位置,写一些相关的信息到LOG文件中。

4.17 mrc_bitmapGetScreen这个函数什么作用?会不会产生新的内存? 答:mrc_bitmapGetScreen的作用是把屏幕缓冲中的图像拷贝到指定的BMP缓冲中。BMP缓冲的内存空间必须在调用之前,先用mrc_bitmapNew分配好。所以mrc_bitmapGetScreen一般需要额外的和屏幕缓冲相等的内存空间。

4.18 编译SPR版本时,出现“Error: L6218E: Undefined symbol main (referred from kernel.o)”的错误提示,如何处理? 答:在代码里面添加以下代码: #ifdef MR_SPREADTRUM_MOD int main(void) {

return 0; }

#endif

4.19 游戏偶尔会出现一个问题,购买东西,购买成功了,但是短信没有回复,之后购买东西都是网络延迟,退出游戏后才能收到短信。

答:前面的购买成功,可能只是超时默认成功。如果之前的短信没有发送完成的话,后台会一直在发送的。在前面的收费短信发送完成之前,这期间调用收费函数,都会直接返回失败。

4.20 在每次发送短信之前,都调用mrc_initChargeOverSea(&tPayCtrlInfo),会不会有问题?

答:收费模拟的初始化,只需要打开游戏的时候,进行初始化即可。不要每次发送都初始化,会有不可预料的问题发生。并且,在退出游戏的时候,要记得释放收费模块。

4.21 编译时加入\有何区别?在哪里添加这串代码?

答:\主要是对刚进入游戏,加载代码时的峰值内存有影响。例如,游戏压缩前的代码大小是200K,压缩后代码的大小为50K。在没有加\的情况下,内存的使用情