- 浏览: 110978 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
QQQrui:
好强大,学习了!
如何将baidu地图中的baidu logo 去掉 -
qi_w2006:
为什么不提一下国内的appcan呢?据我所知AppCan在性能 ...
移动应用框架大全 -
aiquantong:
兄弟 估计你是没有做过J2ME游戏,在J2ME游戏时代,对于剧 ...
J2me 游戏点阵字库引擎(一) 之初步 -
hongliufeiyang:
这么整还不累死了,那还不如直接性的用图片剪切呢
J2me 游戏点阵字库引擎(一) 之初步 -
1171320344:
9嗯呢?怎么没人回复?网上只有这里有 火狐的源码
J2me 开源的wap浏览器源代码分析
让我继续解析
Graphics类
import lxs.slg.Game; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Paint.Align; import android.graphics.Paint.Style; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; public class Graphics { public static final int BASELINE = 64; public static final int BOTTOM = 32; public static final int DOTTED = 1; public static final int HCENTER = 1; public static final int LEFT = 4; public static final int RIGHT = 8; public static final int SOLID = 0; public static final int TOP = 16; public static final int VCENTER = 2; //绘制的位置 Rect clipRect = new Rect(); Paint paint = null; Canvas canvas = null; private Rect getRect(int x, int y, int width, int height) { return new Rect(x, y, x + width, y + height); } public Graphics(Canvas canvas) { this.canvas = canvas; paint = new Paint(); canvas.clipRect(getRect(0, 0, Game.width, Game.height)); this.canvas.save(Canvas.CLIP_SAVE_FLAG); this.clipRect = canvas.getClipBounds(); } public Graphics(Canvas canvas, Paint paint) { this.canvas = canvas; this.paint = paint; canvas.clipRect(0, 0, canvas.getWidth(), canvas.getHeight()); this.clipRect = canvas.getClipBounds(); } public void clipRect(int x, int y, int width, int height) { canvas.clipRect(x, y, x + width, y + height); clipRect = canvas.getClipBounds(); } public void copyArea(int x_src, int y_src, int width, int height, int x_dest, int y_dest, int anchor) { } public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) { paint.setStyle(Style.STROKE); canvas.drawArc(new RectF(getRect(x, y, width, height)), startAngle, arcAngle, true, paint); } public void drawChar(char character, int x, int y, int anchor) { char[] chArr = new char[1]; chArr[0] = character; canvas.drawText(new String(chArr), x, y, paint); } public void drawChars(char[] data, int offset, int length, int x, int y, int anchor) { canvas.drawText(data, offset, length, x, y, paint); } public void drawImage(Image img, int x, int y, int anchor) { int alpha = paint.getAlpha(); paint.setAlpha(img.getAlpha()); canvas.drawBitmap(img.getImg(), x, y, paint); paint.setAlpha(alpha); } public void drawLine(int x1, int y1, int x2, int y2) { canvas.drawLine(x1, y1, x2, y2, paint); } public void drawRect(int x, int y, int width, int height) { Rect rect = getRect(x, y, width, height); paint.setStyle(Style.STROKE); canvas.drawRect(rect, paint); } public static Matrix getTransformMetrix(int transform, int width, int height) { Matrix mMatrix = new Matrix(); Matrix temp = new Matrix(); Matrix temp2 = new Matrix(); float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1 }; temp.setValues(mirrorY); switch (transform) { case Sprite.TRANS_NONE: break; case Sprite.TRANS_ROT90: mMatrix.setRotate(90, width / 2, height / 2); break; case Sprite.TRANS_ROT180: mMatrix.setRotate(180, width / 2, height / 2); break; case Sprite.TRANS_ROT270: mMatrix.setRotate(270, width / 2, height / 2); break; case Sprite.TRANS_MIRROR: mMatrix.postConcat(temp); break; case Sprite.TRANS_MIRROR_ROT90: mMatrix.postConcat(temp); mMatrix.setRotate(90, width / 2, height / 2); break; case Sprite.TRANS_MIRROR_ROT180: mMatrix.postConcat(temp); mMatrix.setRotate(180, width / 2, height / 2); break; case Sprite.TRANS_MIRROR_ROT270: mMatrix.postConcat(temp); mMatrix.setRotate(270, width / 2, height / 2); break; } return mMatrix; } public void drawRegion(Image src, int x_src, int y_src, int width, int height, int transform, int x_dst, int y_dst, int anchor) { if (x_src + width > src.getWidth() || y_src + height > src.getHeight() || width < 0 || height < 0 || x_src < 0 || y_src < 0) { throw new IllegalArgumentException("Area out of Image"); } int alpha = paint.getAlpha(); paint.setAlpha(src.getAlpha()); Bitmap newBitmap = null; Matrix tmp_matrix = new Matrix(); switch (transform) { case Sprite.TRANS_NONE: newBitmap = Bitmap.createBitmap(src.getImg(), x_src, y_src, width, height, tmp_matrix, true); break; case Sprite.TRANS_ROT90: tmp_matrix.reset(); tmp_matrix.preRotate(90); newBitmap = Bitmap.createBitmap(src.getImg(), x_src, y_src, width, height, tmp_matrix, true); break; case Sprite.TRANS_ROT180: tmp_matrix.reset(); tmp_matrix.preRotate(180); newBitmap = Bitmap.createBitmap(src.getImg(), x_src, y_src, width, height, tmp_matrix, true); break; case Sprite.TRANS_ROT270: tmp_matrix.reset(); tmp_matrix.preRotate(270); newBitmap = Bitmap.createBitmap(src.getImg(), x_src, y_src, width, height, tmp_matrix, true); break; case Sprite.TRANS_MIRROR: tmp_matrix.reset(); tmp_matrix.preScale(-1, 1); newBitmap = Bitmap.createBitmap(src.getImg(), x_src, y_src, width, height, tmp_matrix, true); break; case Sprite.TRANS_MIRROR_ROT90: tmp_matrix.reset(); tmp_matrix.preScale(-1, 1); tmp_matrix.preRotate(-90); newBitmap = Bitmap.createBitmap(src.getImg(), x_src, y_src, width, height, tmp_matrix, true); break; case Sprite.TRANS_MIRROR_ROT180: tmp_matrix.reset(); tmp_matrix.preScale(-1, 1); tmp_matrix.preRotate(-180); newBitmap = Bitmap.createBitmap(src.getImg(), x_src, y_src, width, height, tmp_matrix, true); break; case Sprite.TRANS_MIRROR_ROT270: tmp_matrix.reset(); tmp_matrix.preScale(-1, 1); tmp_matrix.preRotate(-270); newBitmap = Bitmap.createBitmap(src.getImg(), x_src, y_src, width, height, tmp_matrix, true); break; } canvas.drawBitmap(newBitmap, x_dst, y_dst, paint); paint.setAlpha(alpha); } public void drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) { canvas.drawBitmap(rgbData, offset, scanlength, x, y, width, height, processAlpha, paint); } public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { Rect rect = getRect(x, y, width, height); paint.setStyle(Style.STROKE); canvas.drawRoundRect(new RectF(rect), arcWidth, arcHeight, paint); } public void drawString(String str, int x, int y, int anchor) { canvas.drawText(str, x, y, paint); } public void drawSubstring(String str, int offset, int len, int x, int y, int anchor) { canvas.drawText(str, offset, len, x, y, paint); } public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) { paint.setStyle(Style.FILL); canvas.drawArc(new RectF(x, y, width, height), startAngle, arcAngle, true, paint); } public void fillRect(int x, int y, int width, int height) { paint.setStyle(Style.FILL); canvas.drawRect(new RectF(getRect(x, y, width, height)), paint); } public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { Rect rect = getRect(x, y, width, height); paint.setStyle(Style.FILL); canvas.drawRoundRect(new RectF(rect), arcWidth, arcHeight, paint); } public void fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3) { paint.setStyle(Style.FILL); canvas.drawLine(x1, y1, x2, y2, paint); canvas.drawLine(x2, y2, x3, y3, paint); canvas.drawLine(x3, y3, x1, y1, paint); } public int getBlueComponent() { int color = paint.getColor(); color = color | 0x000000ff; return color; } public int getClipHeight() { return (int) clipRect.height(); } public int getClipWidth() { return (int) clipRect.width(); } public int getClipX() { return (int) clipRect.left; } public int getClipY() { return (int) clipRect.top; } public int getColor() { return paint.getColor(); } public int getAlpha() { return paint.getAlpha(); } // 和设备有关的函数 public int getDisplayColor(int color) { return -1; } public Font getFont() { return Font.getFont(paint); } public int getGrayScale() { return -1; } public int getGreenComponent() { int color = paint.getColor(); color = color | 0x0000ff00; return color >> 8; } public int getRedComponent() { int color = paint.getColor(); color = color | 0x00ff0000; return color >> 16; } public int getStrokeStyle() { return (int) paint.getStrokeWidth(); } public int getTranslateX() { return -1; } public int getTranslateY() { return -1; } // clipRect(RectF rect, Region.Op op) 函数的用法 public void setClip(int x, int y, int width, int height) { canvas.clipRect(getRect(x, y, width, height), Region.Op.REPLACE); clipRect = canvas.getClipBounds(); } 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); } } public void setColor(int RGB) { paint.setColor(RGB); } public void setAlpha(int alpha) { paint.setAlpha(alpha); } public void setColor(int red, int green, int blue) { paint.setARGB(0xff, red, green, blue); } // android 的字体的控制 public void setFont(Font font) { font.setPaintAtt(paint); } public void setGrayScale(int value) { } public void setStrokeStyle(int style) { paint.setStrokeWidth(style); } public void translate(int x, int y) { canvas.translate(x, y); } }
sprite类
package lxs.slg.j2me; public class Sprite { // //////////////////////////////////////SPRITE ////////////////////////// public static final int TRANS_MIRROR = 2; public static final int TRANS_MIRROR_ROT180 = 1; public static final int TRANS_MIRROR_ROT270 = 4; public static final int TRANS_MIRROR_ROT90 = 7; public static final int TRANS_NONE = 0; public static final int TRANS_ROT180 = 3; public static final int TRANS_ROT270 = 6; public static final int TRANS_ROT90 = 5; }
记录类RecordStore
import lxs.slg.DataBaseHelper; import lxs.slg.Game; import android.database.sqlite.SQLiteDatabase; public class RecordStore { final static int AUTHMODE_ANY = 0; final static int AUTHMODE_PRIVATE = 1; private int authmode; private boolean writable; private String recordStoreName; private int recordId; private DataBaseHelper dataBaseHelper = null; private SQLiteDatabase sqliteDatabase = null; private boolean cheakDataBase() { if (sqliteDatabase == null) { return false; } else { if (sqliteDatabase.isOpen()) { return true; } return false; } } public int addRecord(byte[] data, int offset, int numBytes) { if (!cheakDataBase()) { return 0; } if (sqliteDatabase.isReadOnly() || !writable) { return 0; } dataBaseHelper.insert(sqliteDatabase, recordId, new String(data, offset, numBytes)); recordId++; return recordId; } public void closeRecordStore() { sqliteDatabase.close(); } public void deleteRecord(int recordId) { dataBaseHelper.delete(sqliteDatabase, recordId); } public static void deleteRecordStore(String recordStoreName) { } public String getName() { return recordStoreName; } public int getNextRecordID() { return recordId; } public int getNumRecords() { return 0; } public byte[] getRecord(int recordId) { String storeData = dataBaseHelper.select(sqliteDatabase, recordId); return storeData.getBytes(); } public int getRecord(int recordId, byte[] buffer, int offset) { String storeData = dataBaseHelper.select(sqliteDatabase, recordId); byte byteArr[] = storeData.getBytes(); storeData = new String(byteArr, offset); buffer = storeData.getBytes(); return buffer.length; } public int getRecordSize(int recordId) { return (int) sqliteDatabase.getPageSize(); } public int getSize() { return (int) sqliteDatabase.getMaximumSize(); } public int getSizeAvailable() { return (int) sqliteDatabase.getMaximumSize(); } public int getVersion() { return sqliteDatabase.getVersion(); } public String getPath() { return sqliteDatabase.getPath(); } public static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary) { RecordStore recordStore = new RecordStore(recordStoreName); return recordStore; } public static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary, int authmode, boolean writable) { RecordStore recordStore = RecordStore.openRecordStore(recordStoreName, createIfNecessary); recordStore.setMode(authmode, writable); return recordStore; } public void setMode(int authmode, boolean writable) { this.authmode = authmode; this.writable = writable; if (writable) { sqliteDatabase = dataBaseHelper.getReadableDatabase(); } else { sqliteDatabase = dataBaseHelper.getReadableDatabase(); } } public void setRecord(int recordId, byte[] newData, int offset, int numBytes) { String tem = new String(newData, offset, numBytes); dataBaseHelper.update(sqliteDatabase, recordId, tem); } public RecordStore(String recordStoreName) { this.recordId = 0; this.recordStoreName = recordStoreName; dataBaseHelper = new DataBaseHelper(Game.father, Game.name, recordStoreName); dataBaseHelper.onCreate(sqliteDatabase); } }
到此我们已经完成所用函数的方法的编写,但是现在我们还是需要编写一个Activity将MIDP接入到当前Andriod平台中
我编写了RunActivity
package lxs.slg; import java.util.Random; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.Window; import android.view.WindowManager; public class RunActivity extends Activity { static Random rd; Game game; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); rd = new Random(); game = new Game(RunActivity.this); setContentView(game); // Intent intent = getIntent(); // String name = intent.getStringExtra("name"); // setContentView(R.layout.main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { super.onKeyDown(keyCode, event); return game.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { // TODO Auto-generated method stub super.onKeyUp(keyCode, event); return game.onKeyUp(keyCode, event); } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); return game.onTouchEvent(event); } public void notifyDestroyed() { android.os.Process.killProcess(android.os.Process.myPid()); } }
相关推荐
记载了J2ME游戏如何移植成android游戏的方法。给很多拥有J2ME游戏的朋友想要将手中的资源再次利用起来就下载来看看把。。。
自己搜集整理一份J2ME游戏移植Android文档以及一个实现J2ME接口的一个游戏引擎
手机游戏是目前深受广大手机用户喜爱的一种娱乐软件,各大运营商都有自己的手机游戏平台,比如中国移动的百宝箱,MM平台,当然...有了这个优点也就意味着所有的J2ME程序都可以非常快速的迁移到OPhone(Adnroid)平台。
对于网络一些资源重新整理后,做成一个PPT 文件 在公司目前要做游戏开发把j2me上的游戏移植到android 所以做成一个文件分享给大家,望对大家有帮助
主要是归纳的一些J2ME游戏移植Android平台要点,以及一些比较
很多J2ME开发者可能都会遇到这样的临时性需求。其实J2ME程序往Android移植,并不是特别麻烦。
SDK在android上封装了J2ME API,可以无缝将J2ME 程序移植到到android平台,使用SDK可以快速将J2ME游戏 移植到android平台
j2me移植到android 代码替换开发包:替换j2me平台的Graphics ,Image ,HttpConntion,RecordStore,Player,Connector,Font,Canvas...
j2me移植android,里面有很详细的介绍,下载来看看把!
Image、Font、Graphics等类的封装
笔者最近需要移植一个J2ME的项目到Android平台上,所以抽空研究了一下Android平台的接口规范。 Android平台除了在一些接口上采用了和J2ME不一样的名称之外,基本的接口内容还是一样的,那么移植J2ME到Android平台最...
在手机游戏中程序要处理的主要有游戏界面(UI),按键,数据保存,游戏算法。游戏算法是用java语言...区别也不是很大,J2ME游戏移植到Android上主要要改的就是 画图,画文字,按键,数据保存的代码,其它的基本不用改。
Android下实现的J2ME API类库,使用此SDK可以无缝将你J2ME APP移植成android APP, 支持MIDP2.0、cldc1.0,WMA,jsr75等常用API 20111204更新新版: 1 JAD.MF文件:增加屏幕方向设置 2 JAD.MF文件:增加游戏专用摇杆...
近年来伴着Android智能手机的迅速崛起,如何迅速移植已有的J2me应用到Android让其发挥余力,便成了开发人员急于解决的问题,借助本文档你可以非常快速地将原J2ME应用转化为APK应用。还等什么,马上行动吧....
android平台中j2me MIDP2.0中GameAPI中几个工具类移植版本, 四个类Layer、LayerManager、Sprite、TiledLayer
这个是把J2ME上Layer,LayerManager,Sprite,TiledLayer移植到android的几个类
笔者最近需要移植一个J2ME的项目到Android平台上,所以抽空研究了一下Android平台的接口规范。 Android平台除了在一些接口上采用了和J2ME不一样的名称之外,基本的接口内容还是一样的,那么移植J2ME到Android平台...
主要从控制方法(按键、轨迹球、触屏、重力感应、摄像头、话筒气流、光线亮度)、图形View(高效绘图技术如双缓冲)、音效(游戏音乐)以及最后的OpenGL ES(Java层)和NDK的OpenGL和J2ME游戏移植到Android方法,当然还有...
在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包,主要用于资源受限制的Java环境如Applets或J2ME应用程序(CLDC/ CDC/MIDP)。认真读完对ksoap2的介绍你会发现并...
Android平台除了在一些接口上采用了和J2ME不一样的名称之外,基本的接口内容还是一样的,那么移植J2ME到Android平台最方便的方法就是利用Android平台的接口重写J2ME的接口,本着这个思路笔者写了一个Wrap包,利用这...