这门课的学分就和我花在它上面的时间一样少,所以只接触了个皮毛,不过怎么说呢,java me 或者叫j2me 来来去去也就那么点东西,游戏好不好玩,还得看游戏设计。实现方面把几个基本点做个总结,省的我学完了就忘了自己都学了什么。
1. Canvas 还是GameCanvas
GameCanvas的特点主要是两个,一是缓冲绘制,二是键盘状态。前者就是画上去的东西不会立刻显示出来,要调用 flushGraphics() 才可以。后者指可以随时用getKeyStates()查键盘物理状态并进行比对,这和Canvas被动等待keyPressed()、keyRepeated()、keyReleased()被调用是不一样的。
个人感觉是优先选择GameCanvs,但是GameCanvas相比Canvas有一个问题,就是keyStates能查的键是很有限的,上下左右中加个不那么靠谱的ABCD,没了。如果想用数字键,特别是左右软键,就得关了keyState (在构造函数里super(false)),改用传统的keypressed()等去实现。
触摸屏的那部分懒,没做。
2. 音频视频
这部分想提一句就是视频格式,大部分都是用mpeg吧,问题是这个mpeg有个很重要的信息,就是video 和 audio stream都要用MPEG1!如果你的视频播不出来,很可能是封装的audio格式不对。视频那个一般转码器都有,但是能封MPEG1音频的就难找的要死了……所以实在不行,可以把音频视频分开,用两个player……(被pia飞)
3. SVG
SVG做交互游戏菜单是作业要求的,这部分没敢深入,基本实现了一下。要注意的就是把SVG参数写全了,特别是animate部分,弄不好就图形乱飞。
<animateTransform id=”HighScore_frame” type=”translate” attributeName=”transform” attributeType=”XML”
fill=”freeze” begin=”indefinite” dur=”0.3s” restart=”always” to=”0,60″/>
然后是在SVGEventListener里的交互部分(片段):
Document doc = svgImage.getDocument();
SVGAnimationElement anim = (SVGAnimationElement) doc.getElementById(“HighScore_frame”);
anim.beginElementAt(0);
4. RMS
懒得写,省了,网上例子很多。但是RMS在eclipse里是无法正常工作的,要想看其效果,需要在emulator上安装游戏jad (cmd命令如下)
emulator ‐Xjam:install = “X:\test.jad”
emulator ‐Xjam:run = “X:\test.jad”
5. OutOfMemory
内存溢出,恐怕是最难也是最好解决的问题。除了自我控制图片音频视频之外,还有就是适时将不用资源设null,呼叫System.gc进行回收,必要时用Runtime.getRuntime().freeMemory()监视内存使用情况。图片大小和内存占用并不是一个正比关系,但是你图片小了少了对于减轻内存压力的帮助是很大的……还有就是图片这种资源不要一下放进去,随时用随时加载。其实对于喜欢东西放在一起初始化的我而言还是挺不舒服的,感觉东一块西一块。最好不要指望改emulator内存参数,毕竟减轻内存负担才是正途。
6. 连连看算法
好吧,我写的是连连看,其实就是一个寻路算法。我脑子不太好,对递归有恐惧,理所当然的就离递归远点。算法参考了 http://apps.hi.baidu.com/share/detail/2316722 ,这篇写的很清楚,实现起来也没难度。
评论暂缺