`
sogotobj
  • 浏览: 661780 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

开发易于移植的J2ME游戏(一)

阅读更多

开发易于移植的J2ME游戏(一)

说明:此文为给J2ME开发网(www.j2medev.com)电子期刊的专稿,转载请先联系本人(mobiledev@163.com)

J2ME游戏开发中,移植是个问题。各种手机的屏幕大小,按键,支持的API和性能各不相同,要想一次开发,到处运行并非易事。本文从几个方面简要讨论一下开发易于移植的J2ME游戏的方法,每一节分别对应一个具体问题。

一 不大不小的Size问题

1 屏幕尺寸不等?把它看做变量!
第一个问题,就是屏幕的尺寸问题。不同牌子不同型号的手机,屏幕尺寸大小不一。在渲染时必须考虑到尺寸的变化,即将尺寸看成两个变量 ScreenWidth和ScreenHeight,将这两个变量代入到渲染时坐标的计算式中。这样屏幕尺寸变了,但想要的效果不会变。举个简单的例子,现在想居中绘制一个Logo图,只要设置渲染的坐标为: x=(ScreenWidth-ImageWidth)/2; y=(ScreenHeight-ImageHeight)/2即可。再举个RPG游戏中绘制地图的例子,假如Tile大小为16*16,屏幕大小为128*128,则一屏正好显示8*8个Tile,但是如果直接用8*8次循环绘制这些Tile,那么程序就写死了,如果屏幕大小变了(换了一个机型或改成使用全屏)或者Tile大小变了,这些地方就要改动。正确的方法还是将尺寸看做变量,可将Tile的宽和高定义为常量,这样需要绘制的Tile数目为 ScreenWidth/TileWidth * ScreenHeight/TileHeight。现在你可以在各种大小的屏幕上正确显示你的地图了。这样的例子很多,也不光是屏幕尺寸需要看作变量,凡是有可能改变的数值,将他们定义成变量或常量,那么可移植性就会提高很多。另外,使用相对坐标也能提高可移植性,比如现在需要绘制超级玛丽中得到的金币数,我们需要显示一个金币的图,然后在它后面写上数字。嗯,将金币的坐标设为gold_x,那么数字显示的起始坐标就是gold_x+金币图标宽度+1。我这儿写了一个1,但这不要紧,我只是想显示数字的时候和金币图标隔开一个象素,这样写后,如果我们想将金币数的显示从左边移到右边,则只要改变gold_x就可以啦。如果我们想让金币数目显示在屏幕的最右边怎么办?只要将gold_x设为 ScreenWidth-金币图标宽度-1-StringWidth(String(金币数目))。嗯,就是这样,这是一句伪码,重点在于我们将表示金币数目的数字的长度也计算了一遍。因为不同机器的字符大小也不同。

2 文字大小不等?还是将它看成变量!
说到文字,大家可能都会很郁闷,因为中文普遍比较大,做到手机里面很不美观。当然也有个别,NokiaS40的小字体看着还不错。这儿我想起了一件事,我将字体设为Large时,MotorolaV600的真机显示的是小字体!呵呵,原来设为Small,它倒是大字体。好了,说正题。既然文字大小不等,那我们还是将它看成变量。Font类有两个方法:getHeight和stringWidth可以帮助我们。如果你的游戏里只使用一种字体,那么只要开始时调用一下getHeight,将字体高度记录下来就可以了。当然要记得在paint里面setFont啊!stringWidth可以计算出一个字符串的长度,这非常有用,因为手机中的英文字体一般不是等宽的,而且中英文数字混排时字符串的长度就更不能用字符数*字符宽度去计算了。有了这个函数,我们就可以准确知道所绘制的字符串的长度。这里有个典型的应用是文本显示的时候换行,通过stringWidth可以计算出文本是否需要换行。再给个小小例子,我写得一个工具函数,用来显示左右软键菜单。
public static void drawSoftKeyMenu(Graphics g,String leftKey, String rightKey, int color, int style)
{
drawString(g,leftKey,0,canvasHeight-mainFontHeight,color,style,GLT) ;
drawString(g,rightKey,canvasWidth-stringWidth(rightKey),canvasHeight-mainFontHeight,color,style,GLT) ;
}
当然这个函数你不能直接用,里面用到了好几个我自己封装的函数,不过意思很明白。绘制左软键菜单的坐标是(0,canvasHeight-mainFontHeight),绘制右软键菜单的坐标是(canvasWidth-stringWidth(rightKey),canvasHeight-mainFontHeight)

3 虚拟屏幕 - 很好玩也很好用
第一个问题说了屏幕的大小,我们将它看作变量,就可以解决移植时屏幕不等大的问题了。这儿提供一个高级技巧,其实很简单:)。就是将屏幕的一部分作为你的游戏屏幕,我称它为虚拟屏幕。请相信,它是很有意思也很有用的。虚拟屏幕用起来很容易,只要将你的坐标范围看作: x=0~vsWidth , y=0~vsHeight。按照这个坐标范围,像原来一样作所有的事情,只是,在最后渲染的时候,将你的坐标转换到真实的屏幕坐标。 real_x = x+vsX, real_y = y+vxY 。那么这个虚拟屏幕有什么好处呢?第一,你可以用一个屏幕很大的模拟器开发了,只要在它的屏幕上设置一块虚拟屏幕就可以了。剩于的屏幕怎么办?可以用来显示一些调试信息什么的。当然最好也定义成虚拟屏幕。就是说你可以定义n个虚拟屏幕。每个屏幕显示自己的内容,互不影响。除了调试,开发分屏游戏时也用得上。
上面提到的虚拟屏幕只是简单的在真是屏幕上挖了一块。其实,我们可以完全按照自己的想法定义它,可以任意定义它的大小,定义一个1024×1024的屏幕也没问题。你现在拥有了一个1024*1024的游戏区域了,在里面可以尽情作所有的东西,只要,在渲染的时候将虚拟屏幕的坐标映射到真实屏幕即可: real_x = x/n + vsX , real_y = y/m + vsY 。这里的n和m是比例系数。

小结:这一章讲了size问题,一句话,将会变的看成变量,这不只是针对size有用,针对游戏开发时的所有量都是有效的。即使你确定它不变,也请使用常量定义,请放心,混淆器会将所有的final static内联的。

分享到:
评论

相关推荐

    开发易于移植的J2ME游戏.doc

    综上所述,开发易于移植的J2ME游戏需要在设计阶段就考虑兼容性问题,通过灵活的坐标系统、适应性字体处理、模块化代码以及性能优化策略,可以显著提高游戏的跨平台运行能力。同时,持续的测试和调试对于确保游戏在...

    J2ME游戏开发的高级优化技巧 J2ME游戏开发的高级优化技巧

    J2ME平台的限制,如有限的内存、小屏幕、慢CPU,使得在这样的设备上创建流畅的游戏体验是一项挑战。优化可以帮助提升游戏性能,确保游戏运行在最佳状态。 首先,我们需要理解优化的重要性。实时游戏要求快速的响应...

    j2me开发角色游戏 黑暗迷宫

    【标题】"j2me开发角色游戏 黑暗...总的来说,"j2me开发角色游戏 黑暗迷宫"这个项目涵盖了移动游戏开发的多个层面,从基础的J2ME编程到复杂的游戏设计和优化,对于想要学习移动游戏开发的人来说是一个很好的实践案例。

    ShenDeng.rar_j2me_j2me小游戏_java 射击类

    标题中的"ShenDeng.rar"是一个包含J2ME游戏的压缩包,而“j2me_j2me小游戏_java 射击类”则揭示了这款游戏的类型和开发语言。本文将深入探讨J2ME平台、射击类游戏的特性以及如何用Java语言来构建这样的游戏。 J2ME...

    坦克J2ME游戏khk'

    在介绍完基础知识之后,本书最后介绍了手机游戏的精彩实例,包括单机游戏、联网游戏、3D游戏、滚屏游戏等,还介绍了游戏的开发理念和移植技术。.. 本书内容全面,实例丰富,易于理解,为读者更好地使用这些技术和...

    j2me_MIDlet_手机游戏入门开发_俄罗斯方块

    在移动设备上开发游戏,J2ME(Java 2 Micro Edition)是一个广泛使用的平台,尤其在早期的智能手机和平板电脑中。MIDlet是J2ME中的一个应用程序模型,专为小型设备设计,如手机。本教程将带你进入手机游戏开发的世界...

    MC1000 java J2ME开发出的扫描软件

    MC1000扫描软件采用J2ME,意味着该程序具备跨平台性,能在多种支持J2ME的设备上运行,适应性强,易于移植。 NetBeans作为一款开源的集成开发环境(IDE),为开发者提供了便捷的开发工具,支持多种编程语言,包括...

    基于J2ME技术的嵌入式系统的开发

    总之,J2ME技术为嵌入式系统开发提供了一个安全、可移植且功能丰富的平台,尤其是在资源受限的移动设备上。通过深入了解J2ME的体系结构和开发流程,开发者可以有效地利用这一技术,为市场带来创新的嵌入式解决方案。

    使用J2ME技术开发RPG游戏(二)——按键处理机制.doc

    在使用J2ME技术开发RPG游戏的过程中,按键处理机制是一个关键部分,它关系到游戏的响应速度和玩家体验。本文将深入探讨如何构建这样一个高效、可移植的按键处理系统。 首先,为了确保游戏对按键的反应快速且灵敏,...

    J2ME 开发教程

    - **易于移植**:虽然GSM和CDMA短消息格式有所差异,但基于应用工具箱技术开发的应用很容易在两种网络之间移植。 - **广泛应用**:如信息订阅、移动QQ、移动终端银行、移动终端炒股等。 #### 六、基于多媒体消息的...

    java j2me 学习与开发

    Java J2ME,全称Java 2 Micro Edition,是Oracle公司推出的一种轻量级Java平台,主要用于嵌入式设备和移动设备的开发,如手机、智能手表等。学习J2ME涉及以下几个关键知识点: 1. **Java语言基础**:扎实的Java语言...

    人工智能-机器学习-手机应用软件开发中J2ME技术的应用研究.pdf

    此外,J2ME技术在游戏开发中的应用也十分广泛。通过优化的图形渲染和事件处理机制,开发者可以创建出丰富的交互式游戏体验,且游戏文件体积小,易于下载和分享。结合机器学习,J2ME游戏可以实现智能对手、个性化推荐...

    j2me基础词汇

    3. J2ME游戏移植人员:将游戏从一个平台迁移到另一个平台,需要了解不同平台的差异和技术规格。 五、J2ME程序设计原则 1. 面向对象编程:即使可能导致文件较大,但为了可维护性和扩展性,仍应坚持面向对象的设计。 ...

    j2me贪吃蛇源代码

    在移动设备的早期时代,J2ME(Java 2 Micro Edition)是开发者进行手机游戏开发的主要平台之一。其中,贪吃蛇游戏因其简单易玩、趣味性强的特点,成为许多初学者和爱好者热衷的项目。本篇文章将深度剖析一个基于J2ME...

    如何开发易移植的Brew应用

    随着手机软件市场的不断扩大,越来越多的开发者们致力于移动应用的开发,本文简要论述了在BREW和J2ME平台下应用程序开发的特点和区别,并从接口和框架设计方面提出了易于进行平台移植的方法,以便于帮助那些准备将...

    基于J2ME的手机视频播放系统的开发

    "基于J2ME的手机视频播放系统的开发"这个标题表明了我们要讨论的是一个使用Java Micro Edition (J2ME) 技术构建的手机应用,该应用专门设计用于播放视频。J2ME是Java平台的一个版本,主要用于嵌入式设备,如早期的...

    J2ME应用程序架构模型

    J2ME应用程序架构模型是构建在Java Micro Edition(J2ME)平台上的一种软件设计模式,主要应用于移动设备上的应用程序开发。J2ME以其简洁的开发环境、强大的跨平台能力和适应不同设备的能力,成为移动开发领域的重要...

    J2ME英方版教程(Creating-Mobile-Games-using-J2ME)

    Java ME 的设计目标是提供一种高效、可移植且易于使用的开发环境,以支持资源受限的小型设备上的应用程序开发。 #### 三、本书内容概览 本书详细介绍了 Java ME 平台的关键特性及其在游戏开发中的应用,主要包括...

    me.zip_ME_j2me js

    J2ME是Java平台的一个子集,用于开发在资源有限的设备上运行的应用程序,如移动电话和嵌入式系统。这里的"js"可能指的是JavaScript,也可能是在J2ME环境中实现的JSON解析或序列化的类库。 描述指出,这个项目中的...

Global site tag (gtag.js) - Google Analytics