`
zhengalways
  • 浏览: 15028 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

【转载】浅谈J2me游戏如何快速移植到Android

    博客分类:
  • j2me
阅读更多

《J2me小白转正记》  

                               --------------浅谈J2me游戏如何快速移植到Android


(关于这篇文章~非常的尴尬~骨头就不细说了~当然了咱没理由怪别人~还得修炼哈哈)

前言

 

小白:“老大,你让做的三个J2me游戏搞定了,请看DEMO。”

老大:“恩,不错,小白,你知道Android这个平台吧?”

小白:“恩,听过。听说和J2ME有很多共同点。”

老大:“(一阵奸笑)很多共同点是吧?”

小白:“恩。”

老大:“那好,你把这几个J2ME游戏给我移植到Android上去。”

小白:“……

 

很多J2ME开发者可能都会遇到这样的临时性需求。其实J2ME程序往Android移植,并不是特别麻烦。

经过一番认真学习,小白开始整理起了笔记……

 

   高级UI界面

 

       J2ME的高级用户界面比较鸡肋,在现在大多数的应用里都看不到,多数稍微复杂点的界面都是手工画,或是用一些开源的高级UI库,但Android则不同,它的UI实用、方便,而且很美观,基本无需改动且定制方便。

 

 设备差异

 

       虽说普通的手机性能越来越高,屏幕也越来越大,但平均而言,运行J2ME的手机从性能和屏幕分辨率及附属功能来说不及Android手机。拿入门的HTC G1来说,CPU528MHz,屏幕为3.17英寸触摸屏、HVGA 480×320像素,192MB RAM256MB ROM。所以从J2ME移植到Android的程序可以暂时不考虑性能问题。

       但要充分发挥Android手机的特点。要注意一下几点:

比如应用UI的布局可以更加自由,输入更加灵活,网络应用注意发挥3GWIFI的速度优势。

游戏要注意可适当的用效率换效果,可增加动画、音效、背景音乐的质量,图片元素的大小,发挥高分辨率手机的优势,强大的运算能力可以让开发人员编写基于OpenGL3D游戏,可以用一些吃CPU但效果不错的开发包,如Box2D仿真物理引擎开发包。

可以结合GPS定位、重力感应、话筒、指南针、触笔的压力感应等等让游戏的效果更加逼真。

 

   J2MEAndroid系统的常用类、方法对比

 

J2MEAndroid系统的常用类、方法对比

 

J2ME系统

Android系统

入口程序

MIDlet

Activity

图片类

Image

Image.createImage(path);

BitMap

BitmapFactory.decodeResource(getResources(),R.drawable.map0);

画笔

Graphics

Canvas

绘画

Displayable

View

按键

keyPressed()

keyRepeated()

keyReleased()

onKeyDown()

onKeyUp()

onTracKballEvent()

触笔

pointerPressed(),

pointerReleased(),

pointerDragged()

onTouchEvent()

打印信息

System.out.printlt()

Log

生命周期-开始

startApp(),活动状态,启动时调用,初始化。

onCreate(),返回时也会调用此方法。

onCreate()后调用onStart()

onStart()后调用onResume()

生命周期-暂停

PauseApp(),暂停状态,如来电时,调用该接口。

onPause()

生命周期-销毁

destroyApp(),销毁状态,退出时调用。

onStop(),程序不可见时调用onDestroy(),程序销毁时调用

刷新

高级UI组件由内部刷新实现。

低级UI,canvas中通过调用线程结合repaint()来刷新,让线程不断循环

高级UIHandler类通过消息的机制刷新

onDraw()刷新接口

低级UI开发者用线程控制更新,在lockCanvas()unlockCanvasAndPost()方法之间绘制

数据存储

Record Management System (RMS)

SQLite数据库

SharedPreferences

可绘区域

int clipX = g.getClipX(); 

int clipY = g.getClipY(); 

int clipW = g.getClipWidth(); 

int clipH = g.getClipHeight(); 

g.clipRect(x, y, width, height); 

g.setClip(clipX, clipY, clipW, clipH);

canvas.save();

canvas.clipRect(x,y,x+width, y+height); 

cavnas.resave();

游戏中清屏

paint.setStyle(Style.FILL);

canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), paint);

canvas.drawColor(Color.BLACK);

游戏开发包

javax.microedition.lcdui.game

GameCanvas

Layer

LayerManager

Sprite

TiledLayer

无专门针对游戏的开发包,可以直接拿来主义,将J2ME的开发包稍作修改

音效

Player s =Manager.createPlayer(InputStream);

s.prepare(); //创建

s.start();//播放

s.stop();//暂停

s.stop();//关闭

s.release();//释放  

MediaPlayer类处理背景音乐

SoundPool类处理一些简单的音效

全屏

CanvasSetFullScreenMode()

getWindow().setFlags(

WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

requestWindowFeature(Window.FEATURE_NO_TITLE);

获得屏幕尺寸

Canvas类的getHeight()getWidth()

Display d = getWindowManager().getDefaultDisplay();

 screenWidth = d.getWidth();

 screenHeight = d.getHeight();

双缓冲

Image bufImage=Image.createImage(bufWidth, bufHeight);

Graphics bufGraphics=bufImage.getGraphics();

Bitmap carBuffer = Bitmap.createBitmap(bufWidth, bufHeight, Bitmap.Config.ARGB_4444); 

Canvas carGp = new Canvas(carBuffer);

 

 

 

 

 

      

   开始移植

 

       小白找到Android中对应的J2ME相关的替代类和替代方法后,开始噼里啪啦的改代码了。没过多久,首个俄罗斯方块算是移植成功。当他开始移植下一款游戏时,发现又要重复的改那些代码……

       “可不可以减少代码的改动呢?”小白问自己。“可否用Android的相关代码构造一些和J2me里功能类似的代码呢?”

 

       原则:尽量少改动J2ME项目的代码。用Android中对应的类改写成J2ME中的方法和类,减少以后移植的工作量,甚至实现无缝移植。

 

       “或许我可以构造一个名为MIDlet实为Activity的类,这样J2me中的入口类就不用改动了”

Activity类改装的MIDlet类:

public abstract class MIDlet extends Activity { 

public void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 

startApp(); 

} 

public abstract void destroyApp(boolean unconditional); 

public String getAppProperty(String key) { 

return null; 

} 

public abstract void startApp(); 

public void notifyDestroyed() { 

} 

public void notifyPaused() {} 

public void pauseApp() {} 

public void platformRequest(String URL) {} 

public void resumeRequest() {} 

} 

 

MIDlet类我们解决了,接下来就是非常重要的Canvas类了

J2me里的Canvas类相当于Android体系中的SurfaceView类,都是负责绘制显示界面的,游戏的大循环一半也在这两个类里实现,也就是都会实现Runnable类,更新逻辑和更新界面都在此类的大循环中处理。

 

Graphics类在J2me里负责绘图和排版样式等。

我们可以用Android里的Canvas类和Paint类共同组合一个Android里的Graphics类,如Graphics类的构造函数可这样定义:

public Graphics(Bitmap bitmap) {    

    this.bitmap = bitmap;    

    this.canvas = new Canvas(bitmap);    

    this.canvas.clipRect(0, 0, bitmap.getWidth(), bitmap.getHeight());    

    this.canvas.save(Canvas.CLIP_SAVE_FLAG);    

    this.paint = new Paint();    

    this.clip = canvas.getClipBounds();    

} 

Graphics里可以设置居中方式,在Android体系里我们用Paint类来实现相同的效果,例如:

public void setAlign(int align)    

    {    

        if(LEFT == align    

                ||(Graphics.LEFT | Graphics.TOP) == align    

                ||(Graphics.LEFT | Graphics.BOTTOM) == align)    

        {    

            paint.setTextAlign(Align.LEFT);     

        }else if(HCENTER == align    

                ||(Graphics.HCENTER|Graphics.TOP) == align)    

        {    

            paint.setTextAlign(Align.CENTER);     

        }else if(RIGHT == align    

                ||(Graphics.RIGHT | Graphics.TOP) == align)    

        {    

            paint.setTextAlign(Align.RIGHT);    

        }    

}   

 

所有的绘制方法也同样沿用J2me中的方法名,用Android体系的代码完成方法体,达到无缝移植。以绘制、填充矩形为例:

public void fillArc(int x,int y,int width,int height, int startAngle,int arcAngle) {

分享到:
评论

相关推荐

    浅谈J2me游戏如何快速移植到Android

    ### 浅谈J2me游戏如何快速移植到Android 对于许多从事J2ME开发工作的人员而言,可能会突然间面临一个紧迫的需求:那就是将原本在J2ME平台上的游戏移植到Android平台上。乍一看,这似乎是一项庞大且复杂的工程,但...

    J2ME游戏如何移植成android

    J2ME游戏移植到Android平台的技术要点 在本文中,我们将探讨如何将J2ME游戏移植到Android平台上。作为一名IT行业大师,我将详细地解释J2ME游戏移植到Android平台的技术要点。 首先, lets talk about the ...

    j2me移植Android引擎

    【描述】中提到的“J2ME游戏移植Android文档”很可能包含了一系列步骤和最佳实践,指导开发者如何有效地进行移植工作。这个过程通常包括理解J2ME和Android之间的差异,识别和解决兼容性问题,以及利用特定工具和库来...

    J2ME游戏移植到Android手机

    【J2ME游戏移植到Android手机】是一个技术性较强的主题,涉及到两个不同的移动平台:Java ME(J2ME)和Android。J2ME是早期移动设备上广泛使用的开发框架,而Android则是现代智能手机的主要操作系统。当需要将J2ME...

    j2me移植到Android(Ophone)-游戏文档

    手机游戏是目前深受广大手机用户喜爱的一种娱乐软件,各大运营商都有自己的手机游戏平台,比如中国移动的百宝箱,MM平台,当然...有了这个优点也就意味着所有的J2ME程序都可以非常快速的迁移到OPhone(Adnroid)平台。

    j2me移植到android的代码封装

    当需要将J2ME应用移植到Android时,会遇到一些兼容性问题,因为两者的核心库和API有所差异。本篇文章将深入探讨如何将J2ME中的`Image`、`Font`、`Graphics`等关键类进行封装,以便在Android平台上运行。 首先,我们...

    J2ME游戏移植Android平台要点

    在本文中,我们将深入探讨如何将J2ME游戏移植到Android平台的关键点,以及两者之间的主要差异。 首先,让我们简要了解一下J2ME和Android的基础。J2ME(Java 2 Micro Edition)是Java 2的一个子集,设计用于嵌入式...

    j2me移植android

    然而,随着智能手机的普及,Android成为了主流的操作系统,许多开发者和用户开始寻找将J2ME应用移植到Android平台的方法。本文将详细介绍J2ME应用移植到Android的步骤、挑战以及解决方案。 首先,理解两者之间的...

    j2me_android_sdk1.16

    **J2ME到Android移植SDK 1.16详解** J2ME(Java 2 Micro Edition)是Java平台的一...通过深入理解和熟练使用这个SDK,开发者可以实现快速、高效地将J2ME应用程序和游戏移植到Android,同时保持原有用户基础的满意度。

    j2me移植到android 代码替换开发包 移植利器(版权持有)

    j2me移植到android 代码替换开发包:替换j2me平台的Graphics ,Image ,HttpConntion,RecordStore,Player,Connector,Font,Canvas...

    劲乐团 J2ME 移植

    【劲乐团 J2ME 移植】是一款将热门的音乐节奏游戏《劲乐团》移植到Java ME(J2ME)平台上的作品。J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,专门用于开发在移动设备、嵌入式系统等资源受限的环境中的...

    快速转化J2ME程序为Android程序

    《快速转化J2ME程序为Android程序》 随着Android智能手机的普及,许多开发者面临的问题是如何将原有的J2ME应用程序高效地迁移到Android平台,以利用更广泛的设备和用户基础。J2MEBuilder,一个名为android_midp.jar...

    J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏下,上为另一部分

    J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏

    android J2ME加载器 可以在android机上运行java游戏

    对于开发者而言,J2ME加载器提供了移植旧Java游戏到Android的可能性,从而扩大了这些游戏的受众群体。同时,这也为那些想将Android应用与Java ME生态结合的开发者提供了创新的途径。然而,需要注意的是,并非所有...

    J2ME游戏的基本结构

    在 J2ME 中开发游戏,理解其基本结构至关重要,因为这将直接影响到游戏的性能、可移植性和用户体验。下面我们将深入探讨 J2ME 游戏的基本结构。 一、J2ME 开发环境 J2ME 游戏开发通常需要一个集成开发环境(IDE),...

    j2me游戏引擎详解

    **J2ME游戏引擎详解** Java 2 Micro Edition(J2ME)是Oracle公司为小型设备和嵌入式系统设计的一种Java平台。它主要用于移动设备,如早期的智能手机和平板电脑,提供运行Java应用程序的能力。在J2ME的环境中,游戏...

    j2ME游戏开发详解

    总之,j2ME游戏开发涉及到多方面的技术和技巧,从基础的MIDP API学习,到游戏设计、图形动画和音频处理,再到性能优化和分发部署,每一个环节都是成功开发游戏的关键。通过深入理解和实践,开发者可以创造出丰富的...

    j2me游戏开发 经典教程

    j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发

    J2ME游戏源代码

    通过分析这些J2ME游戏源代码,你可以学习到如何在有限的硬件条件下创建引人入胜的游戏体验,掌握游戏设计、性能优化以及跨平台开发的技巧。同时,这也能帮助你了解移动游戏开发的历史,因为随着技术的发展,现代移动...

    J2ME小游戏J2ME小游戏J2ME小游戏上,下为另一部分

    J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏

Global site tag (gtag.js) - Google Analytics