商务合作:179001057@qq.com

从一个实例浅谈J2ME Polish的build功能(三、polish应用过程中几个问题的解决方法)

技术2022-05-12  0


某平台价值19860元的编程课程资料免费领取【点我领取】


 有了以上两篇文章的铺垫,我想大家基本上就可以使用polish了,但在使用过程中,或许还会遇到很多问题,比如:我要打包的机型在polish中没有找到,我要用的api在polish中没有,我的手机厂商在polish中也没有,在代码中一些polish的标签如何用等等,这篇文章,我们带着这些问题,给读者解答这些问题,游戏问题解决方法很多,不是唯一的,仅供参考。     第一类问题:我的项目中,有几个机型中用到的资源有些不一样,比如7210放不了mid,我要用Nokia提供api里的sound,所以打包的时候我不想把mid文件打包进去,而是要把data.bin文件打包进去,如何解决呢?     答案:在我的第二篇文章里,就给出了答案,这里回顾一下:     <resources                dir="res"                defaultexcludes="yes"                excludes="readme.txt">                <fileset                         dir="res/Sound"                         includes="*.bin"                         if="polish.Identifier == Nokia/7210"                    />       </resources>       这段build内容我不多解释了,我想大家应该明白了,具体放在build那个位置,大家可以参考文章二。       第二类问题:我的机型涉及到很多屏幕大小,比如有C650 128*128的,有7610 176*208的,他们用的图片文件不一样,那么在一个polish中整合后,如果让polish知道,应该用那一张图片呢?       在将这个问题之前,我想先说明一下polish的一个机制,放在res里面的文件,表示polish打包时候不同的型号都会被包含,那么当然如果我们把不同的屏幕大小的都放在一个目录下面,打包的后的jar包含了不需要的图片,会很大,我们当然不能容忍这样的事情发生,给出几个解决方法,大家可以结合使用,效果很不错。其实在polish在给N7210打包的过程中,他会自动去寻找res目录下面Nokia目录下面的7210文件夹下面是否有内容,如果有,就会包含进去,如果在res目录下面已经有了,也会覆盖,用res/Nokia/7210下的文件来取代。当然默认环境下没有res/Nokia/7210这个目录,但你的程序N7210上有一些特别的资源的时候,不要放在其他地方,放这个目录下面就对了。接下来大家应该知道怎么做其他的机型了吧?哈哈,当然,有的人会说用问题一中的方法也会可以的,但是如果你打包的机型用到的资源不统一,你要写很长的build来进行区分了,不可取。当然,这样会有有一个问题,那就是一般同一个屏幕大小的,图片会是一样的,那么我如果用上面两个方法,就没有办法简单的根据屏幕来区分,其实polish给我们提供了一个机制,那就是根据屏幕大小来获取自由,在res下面创建一个FullCanvasSize.170+x200+目录,什么意思?一看就懂的吧,哈哈,这样你的176*208的机型的图片就会在这个文件夹下面找了,而不会包含128*128的图片了,这里给出一个例子说明可以这么做,具体效果怎么样,大家还是要自己去尝试一下的。这样利用上面的三个方法,灵活应用,自由的区分问题就可以完美解决了。       第三类问题:如何在polish里面添加手机厂商?       比如和你想添加一个手机厂商,比如叫XXX,那么你在polish的安装目录下面找到vendors.xml,添加如下代码就可以了:<vendor>        <name>xxx</name>        <features></features></vendor>        第四类问题:如何添加手机型号?        一样的道理,找到安装目录下面的devices.xml。稍微解释一下需要添加的代码段:        <device>        <identifier>Nokia/7210</identifier>--------------->vendor和型号,build里面需要打包机型必须好这里一直        <groups>Series40</groups>--------------->被分在Series40机型这个组里面,这里如果定义了这个,那么在polish中判断是否是40机型的时候,会把这个机型包含进去        <capability name="ScreenSize" value="128x128"/>--------------->屏幕大小        <capability name="BitsPerPixel" value="12"/>        <capability name="JavaPlatform" value="MIDP/1.0" />--------------->MIDP平台        <capability name="SoundFormat" value="midi" />--------------->支持声音类型        <capability name="HeapSize" value="200kb" />--------------->堆内存大小        <capability name="MaxJarSize" value="64kb" />--------------->最大jar支持大小        <capability name="Emulator.Class" value="NokiaEmulator" />        <capability name="Emulator.Skin" value="Nokia_7210_MIDP_SDK_v1_0" />            </device>       

         <capability name="JavaPackage" value="siemens-game-api" />--------------->这个属性在7210中没有,在有些机型中有,主要是说明机型支持那些特殊的api,当然必须是polish的import目录下面有的类了。          第四类问题:如果让polish更加强大,让它支持更多的api,比如,但我们在三星的D508上开发关于SMS的应用的时候,利用j2me自带的mmapi发送失败,我们必须利用三星自己的开发包,假如手头上我们下载了三星的开发包samsung.zip,那么如何让polish支持和呢?很简单,第一步,把开发包放到polish安装目录下面的import目录下面,然后需要注册这个api包,打开安装目录下面的apis.xml文件,添加如下内容:     <api>        <name>Samsung User Interface API</name>--------------->名称,并不重要        <description>The Samsung User Interface API provides            some advanced Message functionalities.        </description>--------------->描述,也不是很很重要        <names>samsung-api,samsungapi</names>--------------->我们在代码里面用的时候,就用这个名字        <symbol>samsung-api</symbol>        <files>samsung.zip</files>--------------->开发包名称,这个必须和import下的名字一样        <path>import/samsung.zip</path>--------------->路径,也必须属性正确    </api>

     给个简单的例子说明如何应用吧     //#if polish.api.samsung-api  ----------------->注意这里红色部分,必须和api中定义的names一样     import javax.wireless.messaging.*;     //#else     //#= import com.samsung.util.*;     //#endif     好了,接下来简单的介绍一些代码用到的常用标签,希望给初学者一些帮助:     //#if polish.api.nokia-ui  判断机型是否支持nokia的开发包     //#if polish.api.mmapi || polish.midp2  如果支持mmapi或者是2.0机型     //#if polish.Vendor == Nokia   如果是Nokia机型     //#if (polish.Identifier == Nokia/7210) || (polish.Identifier == Nokia/N-Gage_QD)   如果是打包Nokia/7210或者Nokia/N-Gage_QD,注意两个都必须用括号,否则会报错。     //#if (polish.ScreenWidth < 176)  如果屏幕宽度小于176     //#ifdef BUY_SMS  如果定义了BUY_SMS

     好了,文章就写到这里。

本文来自博客,转载请标明出处:http://blog.csdn.net/yujiajie1985/archive/2008/07/29/2735030.aspx


最新回复(0)