一种j2me游戏运行方法和装置的制作方法

文档序号:6442365阅读:306来源:国知局
专利名称:一种j2me游戏运行方法和装置的制作方法
技术领域
本发明涉及J2ME游戏技术领域,尤其涉及一种在Android平台上运行J2ME游戏的方法和装置。
背景技术
目前手机已成为人们的一个娱乐工具,而随着Android高端智能手机近几年的爆发式发展,市场对Android操作系统的应用程序需求愈发迫切,尤其是游戏应用程序。由于基于Android平台的应用程序的开发速度远远赶不上需求的增长速度,因此出现了基于 Android平台的游戏应用程序供不应求的情况。与此同时,经过多年的发展,基于J2ME平台所开发的游戏应用程序已经积累了相当丰富的产品,其中包括网络游戏和单机游戏。但由于Android平台主要面向高端手机,而J2ME平台主要面向中低端手机,因此在开发游戏时, 许多开发者选择放弃对J2ME平台的支持。目前人们做了各种努力尝试将J2ME游戏应用程序移植到Android平台上。目前, 大多数的J2ME游戏应用程序要运行于Android平台只能通过按照J2ME游戏应用程序在 Android平台上进行重写的方式,生成Android应用程序。但这种方法对J2ME游戏应用程序的移植效率低,并且延长了游戏应用程序的开发周期,维护更加困难。

发明内容
为解决上述所存在的问题,本发明公开了一种J2ME游戏运行方法和一种J2ME游戏运行装置,使J2ME游戏应用程序可运行于Android平台,提高了 J2ME游戏开发的跨平台性。一种J2ME游戏运行方法,包括以下步骤在Android平台上保存MIDlet类;在Android 平台上保存 Canvas 类、Display 类、Front 类和 Graphics 类;在Andro i d平台上保存Image类;调用上述保存的MIDlet 类、Canvas 类、Display 类、Front 类、Graphics 类和 Image 类,在Android平台上运行J2ME游戏。本发明所提供的J2ME游戏运行方法,在Android平台上提供了 J2ME游戏应用程序的运行环境,实现了 Android平台对J2ME游戏应用程序的支持。游戏开发者采用以J2ME 平台开发后可扩展应用到Android平台上,也即开发一套游戏程序能同时运行于J2ME平台和Android平台。这样既保证了所开发的J2ME游戏能覆盖更多的中低端手机,同时也大大降低了 J2ME游戏应用程序移植到Android平台的代价,提高了游戏应用的开发效率和可维护性。 一种J2ME游戏运行装置,包括游戏程序入口对应模块、Graphic绘图模块对应模块、图片资源模块对应模块和游戏运行模块; 所述游戏程序入口对应模块,用于在Android平台上保存MIDlet类;
4
所述Graphic绘图模块对应模块,用于在Android平台上保存Canvas类、Display 类、Front 类禾口 Graphics 类;所述图片资源模块对应模块,用于在Android平台上保存Image类;所述游戏运行模块,用于调用上述保存的MIDlet类、Canvas类、Display类、Front 类、Graphics类和Image类,在Android平台上运行J2ME游戏。本发明所提供的J2ME游戏运行装置,在Android平台上封装了对J2ME游戏应用程序扩展为Android游戏应用程序的全方位解决方案。不仅实现了 Android平台对J2ME 游戏应用程序的支持,同时针对触屏机的控制特性对J2ME游戏做了许多改进以提高用户体验。实现了跨Android平台的J2ME游戏开发,提高了开发效率,降低了 J2ME游戏移植到 Android平台的代价。


图1为J2ME游戏运行方法示意流程图;图2为J2ME游戏运行装置结构示意图。
具体实施例方式为更进一步阐述本发明所采取的技术手段及取得的效果,下面结合附图及较佳实施例,对本发明所提出的J2ME游戏运行方法和装置的技术方案,进行清楚和完整的描述。请参阅图1,本发明J2ME游戏运行方法的示意流程图。本发明J2ME游戏运行方法包括以下步骤SlOl 在 Android 平台上保存 MIDlet 类;MIDlet类是J2ME游戏应用程序的入口。MIDlet和Android Activity生命周期相似,MIDlet直接继承Activity,从而将Activity API转换为MIDlet API。对J2ME MIDlet中所定义的方法进行同样的定义,并在Activity的生命周期内进行相应的调用,主要包括定义抽象方法 abstract void startApp ()、abstract void destroyApp (boolean unconditional),并在 onCreate ()中调用 startApp (),而在 MIDlet 派生类中实现 destroyApp () K^iIffl System, exit (0)艮口可。需要指出的是,Android平台与J2ME平台的一个不同之处是Android的界面刷新和切换只能在主线程中进行,子线程需要通过Handler通知主线程刷新或切换Canvas界面。因此,需在MIDlet中创建一个供其它类调用切换视图的方法,刷新画面则在Canvas中实现。保存MIDlet类之后,即建立了 MIDlet类与J2ME游戏程序入口的一一对应关系。S102 在 Android 平台上保存 Canvas 类、Display 类、Front 类和 Graphics 类;在 Andro i d 平台上保存 Canvas ;J2ME Canvas是2D游戏开发的核心部分,而J2ME平台上Canvas的功能并不对应 Android平台上Canvas的功能,而是对应SurfaceView的功能。因此保存Canvas需要继承 SurfaceView0由于 Android 需要继承接口 SurfaceHolder. Callback。SurfaceHolder. Callback 定义了 SurfaceView的生命周期,Canvas将SurfaceHolder. Callback接口方法定义为抽象方法由派生类实现,派生类则需要把构造中的初始化内容移到SurfaceHolder. Callback 定义的surfaceCreatedO方法中。定义抽象方法paint (Graphics g)提供给派生类实现。在构造方法中初始化一 yIv SurfaceHolder 对象 mHolder,在 paint ()方^去中通过 mHolder 取得 android, graphics. Canvas对象,并作为参数初始化为Graphics对象,然后再作为参数传递给paint (Graphics g)方法。在Android平台上保存Canvas时,其它方法可采用类似的直接转换方式,如按键响应方法,定义 keyPressedO,在 onKeyDownO 中调用 keyPressedO。在Android 平台上保存 Display ;虽然MIDlet已实现对视图切换的控制,但在J2ME游戏应用程序中一般由Display 控制视图切换。为方便J2ME游戏应用程序的移植,在本发明中定义了 Display类,该 Display 类通过对 androidview. Display 进 亍转换而得至[U 由于 androidview. Display 提供的方法难以和J2ME平台上的Display方法直接对应,因此本发明在J2ME的Display中定义一个androidview. Display成员对象。这样就可以直接定义初始化方法static Display getDisplay (MIDlet mid),通过MIDlet 对象取得 WindowManager,再通过 WindowManager 初始化android, view. Display对象。本发明中的上述定义方法相比于J2ME平台的Display. getDisplay()只是多了 MIDlet参数,可最大程度减少语义上的差别,降低了移植的复杂度。在Android平台上保存Display的另一个重要方法是setCurrent (View view),该方法中直接调用MIDlet对象的sendMessage (View obj)即可。在Andro i d平台上保存Font ;Font功能较为简单,主要用于记录字体大小和风格,只需定义相应的变量,提供赋值方法即可。获取字符串宽度和高度则通过hint取出字体大小直接计算。在 Android 平台上保存 Graphics ;Graphics 成员包括 android, graphics. Canvas> Bitmap、Paint、Rect、Font 对象,并由这些对象实现其功能。绘制方法(包括绘制字符、图形)由Paint和android, graphics. Canvas共同实现。绘制图片则需要取得Bitmap对象,通过android, graphics. Canvas绘制出来,而Bitmap包含在Image类型的参数中。Rect用于剪切绘制的区域。由于android, graphics. Canvas不支持设置参考点,所以需要通过程序根据参考点参数调整绘制的坐标来实现。Graphic绘图模块是J2ME游戏的核心模块,游戏的视觉效果均通过绘图模块实 Mo 保存 Canvas 类、Display 类、Front 类禾口 Graphics 类之后,艮口建立了 Canvas 类、Display 类、Front类和Graphics类与J2ME游戏程序中Graphic绘图模块的对应关系。S103 在 Android 平台上保存 hage 类;Image类无法直接对应Android API的功能,在Android平台上定义Bitmap对象, 直接对Btmap对象进行转换,将游戏程序对Image的操作转换为对Bitmap对象的操作。在Android平台上保存Image类之后,即建立了 Image类与J2ME游戏程序中图片资源模块的对应关系。S104 调用上述保存的 MIDlet 类、Canvas 类、Display 类、Front 类、Graphics 类和Image类,在Android平台上运行J2ME游戏。由于保存的各个类,分别与J2ME游戏中的程序入口、Graphic绘图模块和图片资源模块建立起对应关系,因此通过在Android平台上调用上述类,可实现J2ME游戏在 Android平台上的运行。保存MIDlet类之后,即建立了 MIDlet类与J2ME游戏程序入口的一一对应关系。 通过调用MIDlet类进入J2ME程序入口,从而启动J2ME游戏主程序。Graphic绘图模块是J2ME游戏的核心模块,游戏的视觉效果均通过绘图模块实 Mo 保存 Canvas 类、Display 类、Front 类禾口 Graphics 类之后,艮口建立了 Canvas 类、Display 类、Front类和Graphics类与J2ME游戏程序中Graphic绘图模块的对应关系。游戏主线程启动后调用了 Graphic绘图模块,Graphic绘图模块在调用Android平台的上述类,特别是Canvas绘图机制来实现Graphic绘图的功能。在Android平台上保存Image类之后,即建立了 Image类与J2ME游戏程序中图片资源模块的对应关系。J2ME游戏中Graphic绘图模块通过调用图片资源模块加载图片、声音文件等资源。调用保存的Image类,可供J2ME游戏在Android平台上实现图片资源模块的功能。J2ME程序采用RMS数据存储,为了对RMS数据存储提供支持,需要把J2ME平台的 RMS存储机制转换为Android的文件存储机制,将J2ME游戏所传来的数据流和关键字直接输出到关键字指定的文件中保存。RMS存储的数据格式仅限于字节数组,可将其数据格式转化为字符串格式并调用Android文件存储API将写入的数据保存为文件。优选的,保存类DataMore,创建!Properties对象(android自带的,类似哈希表的存储类),通过save 0保存数据,把游戏数据转换为Object对象,并加上键值(key),保存到!Properties中,创建文件输入流,通过properties, store ()方法写入到文件输出流;通过IoadO方法读取数据,通过文件名创建文件输入流,将数据写入到properties中,再通过键值从properties取出数据对象0bject,然后进行相应的数据类型转换。Android平台接收到多媒体文件播放命令后对多媒体文件进行分类。优选的,对于视频播放文件,通过直接调用Android平台上用于播放视频文件的 API来实现。J2ME游戏的多媒体主要为声音播放文件,若为声音文件则根据声音文件的时间长度判断为音效播放或者音乐播放。优选的,若时间长度大于5秒,则判断为音乐文件,否则判断为音效文件。优选的,如果是音效文件,则通过Android平台的音效池进行播放。通过建立“音效池”的方式,在初始化时记录下音效的标识符列表,并把音效文件加载进“音效池”中, J2ME游戏程序在播放的节点调用播放音效方法,并通过标识符找到相应的音效进行播放。 如果是音乐文件,则通过Android平台的MediaPlayer对象进行播放。音效加载速度较快, 播放时间较短。而音乐多媒体播放支持长时间播放,但加载时间较长。保存声音管理类 SoundManager,通过addSoundO加载所用到的声音文件,判断声音播放时间长度,若大于5 秒则加载为MediaPlayer对象,否则加载为SoundPool对象,并存入哈希表中,在播放时通过键值从哈希表中找到相应的声音对象,调用其播放方法即可。控制信息是用户与程序交互的方式。J2ME游戏程序一般只对物理按键控制信息进行响应,针对该特点,Android平台除了对物理按键控制信息对应传送给J2ME游戏程序外, 还采用Android平台的特色控制方式,触屏和重力感应对J2ME游戏进行扩展。J2ME游戏程序通过接收支持框架的触屏和重力感应控制信息后根据需要响应的操作转换为响应同样操作物理按键控制信息。将Android控制信息发送到Canvas上,然后由Canvas将信息映射为按键信息, 实现方法是Canvas继承了 Andro id手势和重力感应监听接口 OnTouchLi stener,实现 onTouch (View ν,MotionEvent event)方法(系统通过调用该方法将信息传递过来),通过该方法取出屏幕触发的坐标区域,根据具体需求设定为响应的按键键值,并调用按键响应方法。游戏状态对触屏手势事件和重力感应事件转换为相应的按键事件(J2ME游戏一般通过按键事件可完成所有操作控制)。模块接收J2ME游戏程序的状态值、对应的按键值和触发区域,触发区域为一个矩形像素区域,若某个触发区域产生触屏事件,则根据游戏当前状态返回对应的按键事件。同理,重力感是使Canvas继承接口 knsorEventListener,通过 onSensorChanged (SensorEvent e)方法接收重力朝向的坐标值,根据具体需求映射为相应的按键键值,并调用按键响应方法。重力感应事件则根据手机朝向转换为对应的按键事件。 J2ME游戏程序只需在每一个初始化的节点进行控制模块的设置,即可扩展为支持触屏和重力感应功能,丰富了用户体验。本发明所提供的J2ME游戏运行方法,在Android平台上提供了 J2ME游戏应用程序的运行环境,实现了 Android平台对J2ME游戏应用程序的支持。游戏开发者采用以J2ME 平台开发后可扩展应用到Android平台上,也即开发一套游戏程序能同时运行于J2ME平台和Android平台。这样既保证了所开发的J2ME游戏能覆盖更多的中低端手机,同时也大大降低了 J2ME游戏应用程序移植到Android平台的代价,提高了游戏应用的开发效率和可维护性。并且在Android平台上向J2ME游戏开放的API均参照J2ME平台API的功能实现同样的功能,并以对应的J2ME API命名,使得J2ME游戏自身的程序代码无需做修改,大大提高可操作性和可维护性。请参阅图2,本发明J2ME游戏运行装置的结构示意图。本发明J2ME游戏运行装置包括游戏程序入口对应模块201、Graphic绘图模块对应模块202、图片资源模块对应模块 203和游戏运行模块204 ;所述游戏程序入口对应模块201,用于在Android平台上保存MIDlet类;保存MIDlet类之后,即建立了 MIDlet类与J2ME游戏程序入口的一一对应关系。所述Graphic绘图模块对应模块202,用于在Android平台上保存Canvas类、 Display 类、Front 类禾口 Graphics 类;Graphic绘图模块是J2ME游戏的核心模块,游戏的视觉效果均通过绘图模块实 Mo 保存 Canvas 类、Display 类、Front 类禾口 Graphics 类之后,艮口建立了 Canvas 类、Display 类、Front类和Graphics类与J2ME游戏程序中Graphic绘图模块的对应关系。所述图片资源模块对应模块203,用于在Android平台上保存Image类;在Android平台上保存Image类之后,即建立了 Image类与J2ME游戏程序中图片资源模块的对应关系。所述游戏运行模块204,用于调用上述保存的MIDlet类、Canvas类、Display类、Front类、Graphics类和Image类,在Android平台上运行J2ME游戏。由于保存的各个类,分别与J2ME游戏中的程序入口、Graphic绘图模块和图片资源模块建立起对应关系,因此通过在Android平台上调用上述类,可实现J2ME游戏在 Android平台上的运行。所述游戏运行模块204包括J2ME游戏程序启动模块、Graphic绘图模块运行模块和图片资源模块运行模块。所述J2ME游戏程序启动模块,用于调用保存的MIDlet类,在Android平台上启动 J2ME游戏程序。保存MIDlet类之后,建立MIDlet类与J2ME游戏程序入口的一一对应关系,通过调用MIDlet类进入J2ME程序入口,从而启动J2ME游戏主程序。所述Graphic绘图模块运行模块,用于调用保存的Canvas类、Display类、Front 类和Graphics类,在Android平台上运行J2ME游戏程序中的Graphic绘图模块。Graphic绘图模块是J2ME游戏的核心模块,游戏的视觉效果均通过绘图模块实现° 保存 Canvas 类、Display 类、Front 类禾口 Graphics 类之后,建立 Canvas 类、Display 类、Front类和Graphics类与J2ME游戏程序中Graphic绘图模块的对应关系。游戏主线程启动后调用了 Graphic绘图模块,Graphic绘图模块在调用Android平台的上述类,特别是Canvas绘图机制来实现Graphic绘图的功能。所述图片资源模块运行模块,用于调用保存的Image类,在Android平台上运行 J2ME游戏程序中的图片资源模块。在Android平台上保存Image类之后,建立Image类与J2ME游戏程序中图片资源模块的对应关系,J2ME游戏中Graphic绘图模块通过调用图片资源模块加载图片、声音文件等资源。所述游戏运行模块204进一步包括数据存储模块。所述数据存储模块将J2ME游戏采用RMS数据存储方式待存储的字节数组格式数据,转换为字符串格式数据;所述数据存储模块调用Android平台的文件存储API将转换的字符串格式的数据存储到Android平台上的文件中。所述游戏运行模块204进一步包括多媒体播放模块。所述多媒体播放模块将多媒体文件分类为视频播放文件或者声音播放文件;如果多媒体文件是视频播放文件,则所述多媒体播放模块调用Android平台用于视频播放的API进行播放;如果多媒体文件是声音播放文件,则所述多媒体播放模块根据文件的播放时间长度将文件分类为音效文件或者音乐文件;如果多媒体文件是音效文件,则所述多媒体播放模块通过Android平台的音效池进行播放;如果多媒体文件是音乐文件,则所述多媒体播放模块通过Android平台的 MediaPlayer对象进行播放。所述游戏运行模块204进一步包括控制模块。所述控制模块将Android平台的触屏和重力感应控制信息转换为按键控制信息;
所述控制模块调用J2ME游戏中的按键响应方法,对转换的按键控制信息进行响应。本发明所提供的J2ME游戏运行装置,在Android平台上封装了对J2ME游戏应用程序扩展为Android游戏应用程序的全方位解决方案。不仅实现了 Android平台对J2ME 游戏应用程序的支持,同时针对触屏机的控制特性对J2ME游戏做了许多改进以提高用户体验。实现了跨Android平台的J2ME游戏开发,提高了开发效率,降低了 J2ME游戏移植到 Android平台的代价。以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。
权利要求
1.一种J2ME游戏运行方法,其特征在于,包括以下步骤 在Android平台上保存MIDlet类;在 Android 平台上保存 Canvas 类、Display 类、Front 类禾口 Graphics 类; 在Android平台上保存Image类;调用上述保存的MIDlet类、Canvas类、Display类、Front类、Graphics类和Image类, 在Android平台上运行J2ME游戏。
2.如权利要求1所述的J2ME游戏运行方法,其特征在于,所述调用上述保存的MIDlet 类、Canvas 类、Display 类、Front 类、Graphics 类和 hage 类,在 Android 平台上运行 J2ME 游戏的步骤包括以下步骤调用保存的MIDlet类,在Android平台上启动J2ME游戏程序; 调用保存的Canvas类、Display类、Front类和Graphics类,在Android平台上运行 J2ME游戏程序中的Graphic绘图模块;调用保存的Image类,在Android平台上运行J2ME游戏程序中的图片资源模块。
3.如权利要求1所述的J2ME游戏运行方法,其特征在于,所述在Android平台上运行 J2ME游戏的步骤包括以下步骤将J2ME游戏采用RMS数据存储方式待存储的字节数组格式数据,转换为字符串格式数据;调用Android平台的文件存储API将转换的字符串格式的数据存储到Android平台上的文件中。
4.如权利要求1所述的J2ME游戏运行方法,其特征在于,所述在Android平台上运行 J2ME游戏的步骤包括以下步骤将多媒体文件分类为视频播放文件或者声音播放文件;如果多媒体文件是视频播放文件,则调用Android平台用于视频播放的API进行播放;如果多媒体文件是声音播放文件,则根据文件的播放时间长度将文件分类为音效文件或者音乐文件;如果多媒体文件是音效文件,则通过Android平台的音效池进行播放; 如果多媒体文件是音乐文件,则通过Android平台的MediaPlayer对象进行播放。
5.如权利要求1所述的J2ME游戏运行方法,其特征在于,所述在Android平台上运行 J2ME游戏的步骤包括以下步骤将Android平台的触屏和重力感应控制信息转换为按键控制信息; 调用J2ME游戏中的按键响应方法,对转换的按键控制信息进行响应。
6.一种J2ME游戏运行装置,其特征在于,包括游戏程序入口对应模块、Graphic绘图模块对应模块、图片资源模块对应模块和游戏运行模块;所述游戏程序入口对应模块,用于在Android平台上保存MIDlet类; 所述Graphic绘图模块对应模块,用于在Android平台上保存Canvas类、Display类、 Front 类禾口 Graphics 类;所述图片资源模块对应模块,用于在Android平台上保存Image类; 所述游戏运行模块,用于调用上述保存的MIDlet类、Canvas类、Display类、Front类、Graphics类和Image类,在Android平台上运行J2ME游戏。
7.如权利要求6所述的J2ME游戏运行装置,其特征在于,所述游戏运行模块包括J2ME 游戏程序启动模块、Graphic绘图模块运行模块和图片资源模块运行模块;所述J2ME游戏程序启动模块,用于调用保存的MIDlet类,在Android平台上启动J2ME 游戏程序;所述Graphic绘图模块运行模块,用于调用保存的Canvas类、Display类、Front类和 Graphics类,在Android平台上运行J2ME游戏程序中的Graphic绘图模块;所述图片资源模块运行模块,用于调用保存的Image类,在Android平台上运行J2ME 游戏程序中的图片资源模块。
8.如权利要求6所述的J2ME游戏运行装置,其特征在于,所述游戏运行模块进一步包括数据存储模块;所述数据存储模块将J2ME游戏采用RMS数据存储方式待存储的字节数组格式数据,转换为字符串格式数据;所述数据存储模块调用Android平台的文件存储API将转换的字符串格式的数据存储到Android平台上的文件中。
9.如权利要求6所述的J2ME游戏运行装置,其特征在于,所述游戏运行模块进一步包括多媒体播放模块;所述多媒体播放模块将多媒体文件分类为视频播放文件或者声音播放文件;如果多媒体文件是视频播放文件,则所述多媒体播放模块调用Android平台用于视频播放的API进行播放;如果多媒体文件是声音播放文件,则所述多媒体播放模块根据文件的播放时间长度将文件分类为音效文件或者音乐文件;如果多媒体文件是音效文件,则所述多媒体播放模块通过Android平台的音效池进行播放;如果多媒体文件是音乐文件,则所述多媒体播放模块通过Android平台的 MediaPlayer对象进行播放。
10.如权利要求6所述的J2ME游戏运行装置,其特征在于,所述游戏运行模块进一步包括控制模块;所述控制模块将Android平台的触屏和重力感应控制信息转换为按键控制信息;所述控制模块调用J2ME游戏中的按键响应方法,对转换的按键控制信息进行响应。
全文摘要
本发明公开了一种J2ME游戏运行方法,包括在Android平台上保存MIDlet类;在Android平台上保存Canvas类、Display类、Front类和Graphics类;在Android平台上保存Image类;调用上述保存的类,在Android平台上运行J2ME游戏。此外,还公开了一种J2ME游戏运行装置,包括游戏程序入口对应模块、Graphic绘图模块对应模块、图片资源模块对应模块和游戏运行模块。本发明所提供的J2ME游戏运行方法和装置,实现了Android平台对J2ME游戏应用程序的支持。
文档编号G06F9/44GK102419708SQ20111043095
公开日2012年4月18日 申请日期2011年12月19日 优先权日2011年12月19日
发明者郑瑞琳 申请人:广州杰赛科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1