ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:21.23KB ,
资源ID:5284018      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5284018.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CMCC移植经验汇总.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CMCC移植经验汇总.docx

1、CMCC移植经验汇总CMCC移植总结以下是大家提供的各机型BUG汇总,我整理了一下发给大家,目的是为了让大家在遇到问题时可以多一些解决问题的思路,由于未做真机测试,所以以下的经验可能有一些不是完全正确,请大家勿怪。1 NOKIA S60系列:来电挂起并返回后,位于paint方法外部的Graphics可能会失效,代码片段如下:Graphics g_copy;public void run() while( true )g_copy.drawString( );repaint();public void paint( Graphics g ) g_copy = g;当挂起返回后,g_copy可能会

2、失效,对g_copy的一切绘制方法调用均有可能抛出NullPointerException,但此时的g_copy可能并不为null。经验提供者:郭金鑫在用双缓冲的方法绘制的时候就不会出现此问题2 向现有代码添加CMCC LOGO的简便方法,代码片段如下:int cmcc_current_frame = 0;final int cmcc_max_frame = 10;public void run() /run方法中添加如下代码while( true ) if( cmcc_current_frame cmcc_max_frame ) repaint(); else break;.public v

3、oid paint( Graphics g ) /paint方法中添加如下代码if( cmcc_current_frame cmcc_max_frame ) g.drawImage( cmcc_logo, x, y, 0 ); cmcc_current_frame+;添加上述代码后,cmcc_logo已可以正常绘制到屏幕上,我们需要做的只是添加一键跳过的代码就可以了。经验提供者:郭金鑫一般情况下,我用的是状态来添加3 索爱K700C,是MIDP Canvas在keyPressed中调用getGameAction()后,左右软键的键值可能会失效,原因之一可能是因为getGameAction会抛出

4、异常。遇此问题可尝试将getGameAction包含在trycatch( Exception ex )中。经验提供者:郭金鑫了解机型参数,提前设置左右软件键值4 索爱K700C支持NOKIA API,但是getWidth和getHeight在两个机型的类库中处于类层次结构中的不同位置,因此编译生成的字节码可能会产生问题,解决办法是将程序中调用getWidth和getHeight的代码替换为常量,如176 和 208。经验提供者:郭金鑫了解机型参数,尽量用屏幕的固定大小来定义宽高5 索爱K700C的FullCanvas全屏尺寸为176 x 208,在真机上的运行效果为屏幕上下各有一条黑边,解决办

5、法是将FullCanvas用Canvas替换。另外,索爱K700C的FullCanvas中的getGameAction不会抛出异常(与Canvas不同),修改时要注意。经验提供者:郭金鑫同上6 索爱K700C在使用UTF8格式byte创建String时可能会出现问题,很多游戏在索爱K700C上暴内存也是由此引起的,解决方案是将资源中字符串提取出来,放到源码中,并将源码格式转为UTF8格式。经验提供者:曲艺源码转换格式,记下了7 很多机型在屏幕切换时对showNotify和hideNotify以及pauseApp和startApp的调用可能并不符合SUN的官方规范,但是在屏幕切换时或挂起返回时必

6、定会调用某几个方法,这里提供一个通用解决方案。如下:在startApp中添加对showNotify的调用,在pauseApp中添加对hideNotify的调用,并将主要代码逻辑放在showNotify和hideNotify中。经验提供者:郭金鑫屏幕切换可以用状态来解决此问题8 三星D508,在左右软键按下并释放后,有可能会只调用keyPressed,而不调用keyReleased,但这种情况只是偶尔发生,解决办法如下:在keyPressed中判断当前按下的键是否为左右软键,如果是的话,则手动调用keyReleased。此种修改办法不适合的情况如下:1.游戏的按键逻辑全都在keyReleased

7、中的话,可能出现问题,可把按键逻辑放到keyPressed中。2.如果游戏支持长按键的话,此种解决办法必定会出问题,目前没有解决方案。经验提供者:曲艺由于目前无法解决此问题,尽量避免一下吧9 索爱机型,如果setFont的参数设置不正确,则可能在游戏运行过程中抛出异常,解决方案是设置成其他字体。另索爱机型的drawString锚点设置不正确也可能会抛异常,大家在做的时候注意一下。经验提供者:郭金鑫要注意索爱机型的字体问题10目前有很多游戏中使用了多个Canvas类,当多个Canvas切换时可能会出现白屏现象,解决方案是合并多个Canvas类,但大家绝对不要硬生生的将两个Canvas类的代码进行

8、合并,而是应该通过抽取出具体Canvas类的接口,再使用一个新的Canvas类来调用此接口中的方法,由于代码比较复杂,无法提供代码,这个大家在遇到具体问题时可以来找我。经验提供者:曲艺在初期构建框架的时候就注意就不会出现此问题了11游戏下载安装失败,其原因可能是游戏名称太长,改短点就行了。经验提供者:章谦养成习惯,避免游戏名长度过长12NOKIA QD,由缓冲图中得到的Graphics,不能够设置字体颜色,解决办法是,将缓冲图去掉或者是先画完缓冲图再画字。经验提供者:章谦后画字13索爱K700C,播声音的时候如果没用Player.realize()和Player.prefetch()而是直接使

9、用splayer.start()可能会导致声音无法正常播放。经验提供者:章谦14很多机型在挂起并返回后,之前stop的声音,再调用start之后无法继续播放。原因可能是在showNotify中无法激活声音设备。解决方案1:在挂起时不停止音乐,而是设置音乐音量为0,返回之后再设置回来。经验提供者:郭金鑫 解决方案2:可尝试在paint()中进行声音的激活。经验提供者:曲艺 解决方案3:可以先画一个暂停屏幕后触发一个退出暂停屏幕的按键时再放声音。经验提供者:申岩第三种方法比较适用15E2执行hidenotify和shownotify,E6不执行。E2可以直接拿nokia的240*320移植,只要改

10、左右按键即可,三星D508和D808的按键和nokia一样,可以分别拿k700c(D508是176*220)和240*320移植,LGkg90不能播放wav文件,我试过料理鼠王和怒的wav声音文件,他的字体和motE398系列的差不多大小。经验提供者:申岩默默的记下了16MOTO机型在setFullScreen()后,getWidth()与getHeight()返回值与屏幕不符,但是如果在paint()方法内部调用getWidth()或者getHeight()的话,则与实际屏幕参数相符。NOK和SE暂时无此问题。经验提供者:申岩那就在了解机型的前提下,用常量来定义宽高17K700C,在有多个按

11、键同时按下时,传入keyPressed中的keyCode的值可能与所按下的任何一个键的键值都不相符,而是映射成了其他的按键,如:同时按下6和8,此时可能传入9的键值。经验提供者:谢雷18MOTO V300的字体,下面少1象素,是手机问题。经验提供者:谢雷记住了,V300字体下面少一像素19NOKIA N73再使用drawRegion做图片翻转时,原图的透明色在经翻转后会变成黑色,解决方案如下:将drawRegion用Image.createImage替换。经验提供者:谢雷一般在画的时候都用Image.createImage图片翻转有自己的方法21NOKIA N73在使用getRGB时得到的点阵

12、数组会有问题,原图中的透明色被转换成了黑色(可能是黑色),解决办法是,得到点阵数组后,原本应该透明的点的颜色重新设置为0。经验提供者:谢雷将颜色重新设置为022索爱510的机型的因为休眠的时候屏幕会关闭,有可能造成休眠返回后造成白屏。 解决方案1:在线程的while(true)中或者在repaint()之前进行Display.isShown判断,可以解决部分问题。经验提供者:白杰解决方案2:在游戏的循环中设置手机背景灯常亮,midp和nokia Api中均可以设置。经验提供者:郭金鑫在手机屏幕关闭前做判断,以避免此问题23LG77对一些mid的格式支持不好,有些mid文件会加载不进去,造成声音

13、创建的异常。经验提供者:白杰换其他音频格式24MOTO声音暂停应该写在pauseApp中,如果写在hideNotify中返回时会有破音。经验提供者:白杰记住了,MOTO声音的暂停尽量在pauseApp中写25除nokia机型之外其他机型callSerially方法都多多少少会存在一些问题,比如按键响应速度慢,或者屏幕绘制速度慢等等,解决方案将callSerially改成while(true)的形式。经验提供者:白杰26一些机型对Timer的实现可能存在问题,导致按键响应极其迟钝,解决办法是将Timer改成while(true)的形式。经验提供者:曲艺27对于MOTO K1和V300机型,创建声

14、音时,如果一次创建几个player时,声音无法正常播放,应当在播放某个声音时单独创建要播放的这个声音,如果此前有其他的声音在播放,应该把正在播放的player清掉。代码片段如下: Player player; public void playSound( String url ) try if( player != null ) player.stop(); player.deallocate(); player.close(); player = null; player = Manager.createPlayer( “”.getClass().getResource().getInput

15、Stream(), “audio/midi” );player.realize();player.prefetch();player.start();catch( Exception ex )经验提供者:潘宇琪清理掉其他的,运行当前的29对rms进行操作时先要openRecordStore,再进行读写,读写完成后要closeRecordStore,如果对于同一个名称的数据库open两次的话会出错,例如:private static final String STORE_NAME = Game Mark; private void initResources() throws IOExcepti

16、on, RecordStoreException try rs = RecordStore.openRecordStore(STORE_NAME, true); catch (RecordStoreException ex2) ex2.printStackTrace(); System.out.print(open wrong); try if (rs.getNumRecords() 1) SetNewRMS(); else try ReadRMS(); catch (Exception ex4) ex4.printStackTrace(); catch (RecordStoreNotOpen

17、Exception ex3) ex3.printStackTrace(); try rs.closeRecordStore(); catch (RecordStoreNotOpenException ex1) System.out.print(ex1); catch (RecordStoreException ex1) ex1.printStackTrace(); public void ReadRMS() throws Exception rs = RecordStore.openRecordStore(STORE_NAME, true); ByteArrayInputStream byte

18、is = new ByteArrayInputStream(rs.getRecord(1); DataInputStream datais = new DataInputStream(byteis); for (int i = 0; i 22; i+) ID_LevelMarki = datais.readInt(); Isshowstory = datais.readBoolean(); mobile = datais.readUTF(); PlayerName = datais.readUTF(); LevelNum = datais.readInt(); datais.close();

19、byteis.close(); rs.closeRecordStore();这里我们可以看到ReadRMS()这个方法是对STORE_NAME这个数据库进行读取,rs = RecordStore.openRecordStore(STORE_NAME, true);openRecordStore这个方法用了两次,这样读取时就会出错。经验提供者:潘宇琪尽量避免同一个名称30有些游戏会有积分联网的功能,可以查看服务器上的高分榜和上传积分到服务器,有时候会有积分不能上传的情况,造成游戏死机,这可能是网络连接的问题或者是服务器端的设置问题,比如服务器设置为只读。 修改的方法是在网络连接的部分将出现这种情

20、况的解决办法写在catch()里。例如: public void get_list(String mobile, int pagesize, int page) throws IOException Isconnect = true; repaint(); serviceRepaints(); HttpConnection hc = null; DataOutputStream dos = null; DataInputStream dis = null; try try if (connectType = 0) hc = (HttpConnection) Connector.open(htt

21、p:/ + url + dir, Connector.READ_WRITE); else hc = (HttpConnection) Connector.open(http:/10.0.0.172 + dir, Connector.READ_WRITE, true); hc.setRequestProperty(X-Online-Host, url); hc.setRequestMethod(HttpConnection.POST); hc.setRequestProperty(Connection, close); hc.setRequestProperty(Pragma, no-cache

22、); hc.setRequestProperty(Content-Type, application/octet-stream); hc.setRequestProperty(Cache-Control, no-cache); dos = hc.openDataOutputStream(); dos.writeInt(2); dos.writeUTF(mobile); dos.writeInt(pagesize); dos.writeInt(page); dis = new DataInputStream(hc.openInputStream(); catch (Exception ex) b

23、yte array = null; ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteArray); out.writeInt(0); out.writeInt(0); out.writeInt(1); out.writeInt(1); out.writeInt(30); for (int i = 0; i 30; i+) List_IDi = 0; List_namei = -; List_mobilei = -; Lis

24、t_scorei = 0; for (int i = 0; i 30; i+) out.writeInt(0); out.writeUTF(-); out.writeUTF(-); out.writeInt(0); out.close(); array = byteArray.toByteArray(); dis = new DataInputStream(new ByteArrayInputStream(array); scoreInlist = dis.readInt(); placeInlist = dis.readInt(); list_length = dis.readInt();

25、Page_ID = dis.readInt(); int num = dis.readInt(); for (int i = 0; i List_ID.length; i+) List_IDi = 0; List_namei = -; List_mobilei = -; List_scorei = 0; for (int i = 0; i num; i+) List_IDi = dis.readInt(); List_namei = dis.readUTF(); List_mobilei = dis.readUTF(); List_scorei = dis.readInt(); System.

26、out.println(List_IDi + List_namei + List_mobilei + List_scorei); for (int i = 0; i = 0) List_IDi = List_IDi - 1 + 1; else catch (Exception e) e.printStackTrace(); System.out.println(err + e.toString(); finally if (dis != null) dis.close(); if (dos != null) dos.close(); if (hc != null) hc.close(); Is

27、connect = false; 经验提供者:潘宇琪在catch里做处理,避免死机31moto系列当遇到文件形式创建图片的时候可以适当的把图片从文件中解析出来来创建并且之后System.gc()可以有效的缓解因为图片造成内存紧缺的状况,K700出现过游戏过程中图片加载不进去IO异常(原因不明.),可以在不暴内存的情况下在开始时期加载相关的图片来解决问题。经验提供者:白杰适当的对不同性能的手机型号做更好的内存管理32MOTO K1 使用GameCanvas时,重绘屏幕的方法如果是flashGraphics的话,command部分不会自动更新(在addCommand之后不更新,需按左右软键才能更新

28、),把flushGraphics改成repaint()即可解决此问题。经验提供者:郭金鑫直接用repaint()方法33MOTO K1 font.getHeight返回中文字体高度与实际高度不符合,比实际字体高度要小,可能是返回的英文字高度,游戏运行时可能会产生文字重叠现象。解决办法将font.getHeight替换成常量18。经验提供者:章谦了解机型参数,直接用常量,MOTO K134SEK500C最大下载尺寸为300K,多一点也不可。经验提供者:白杰索爱K500C游戏不要超过300K大小35NOK3230 来电时不调用pauseApp。经验提供者:章谦手动调用36NOK3230 来电后程序会继续运行,即由MIDlet应用程序进程所管理的线程并没有被挂起。 自己手动挂起

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1