`
aiquantong
  • 浏览: 110978 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

J2ME游戏只移植到Android平台(二)

 
阅读更多

 让我继续解析

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游戏如何移植成android游戏的方法。给很多拥有J2ME游戏的朋友想要将手中的资源再次利用起来就下载来看看把。。。

    j2me移植Android引擎

    自己搜集整理一份J2ME游戏移植Android文档以及一个实现J2ME接口的一个游戏引擎

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

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

    J2ME游戏移植到Android手机

    对于网络一些资源重新整理后,做成一个PPT 文件 在公司目前要做游戏开发把j2me上的游戏移植到android 所以做成一个文件分享给大家,望对大家有帮助

    J2ME游戏移植Android平台要点

    主要是归纳的一些J2ME游戏移植Android平台要点,以及一些比较

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

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

    j2me_android_sdk1.16

    SDK在android上封装了J2ME API,可以无缝将J2ME 程序移植到到android平台,使用SDK可以快速将J2ME游戏 移植到android平台

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

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

    j2me移植android

    j2me移植android,里面有很详细的介绍,下载来看看把!

    j2me移植到android的代码封装

    Image、Font、Graphics等类的封装

    两个小时精通Android开发之界面篇【j2me移植】

    笔者最近需要移植一个J2ME的项目到Android平台上,所以抽空研究了一下Android平台的接口规范。 Android平台除了在一些接口上采用了和J2ME不一样的名称之外,基本的接口内容还是一样的,那么移植J2ME到Android平台最...

    Android游戏移植

    在手机游戏中程序要处理的主要有游戏界面(UI),按键,数据保存,游戏算法。游戏算法是用java语言...区别也不是很大,J2ME游戏移植到Android上主要要改的就是 画图,画文字,按键,数据保存的代码,其它的基本不用改。

    j2me_android_sdk_1.0

    Android下实现的J2ME API类库,使用此SDK可以无缝将你J2ME APP移植成android APP, 支持MIDP2.0、cldc1.0,WMA,jsr75等常用API 20111204更新新版: 1 JAD.MF文件:增加屏幕方向设置 2 JAD.MF文件:增加游戏专用摇杆...

    快速转化J2ME程序为Android程序

    近年来伴着Android智能手机的迅速崛起,如何迅速移植已有的J2me应用到Android让其发挥余力,便成了开发人员急于解决的问题,借助本文档你可以非常快速地将原J2ME应用转化为APK应用。还等什么,马上行动吧....

    android平台中使用j2me MIDP2.0中GameAPI

    android平台中j2me MIDP2.0中GameAPI中几个工具类移植版本, 四个类Layer、LayerManager、Sprite、TiledLayer

    ME上Layer,LayerManager,Sprite,TiledLayer移植到android

    这个是把J2ME上Layer,LayerManager,Sprite,TiledLayer移植到android的几个类

    精通Android开发之界面速成

    笔者最近需要移植一个J2ME的项目到Android平台上,所以抽空研究了一下Android平台的接口规范。 Android平台除了在一些接口上采用了和J2ME不一样的名称之外,基本的接口内容还是一样的,那么移植J2ME到Android平台...

    Android游戏开发之旅.doc

    主要从控制方法(按键、轨迹球、触屏、重力感应、摄像头、话筒气流、光线亮度)、图形View(高效绘图技术如双缓冲)、音效(游戏音乐)以及最后的OpenGL ES(Java层)和NDK的OpenGL和J2ME游戏移植到Android方法,当然还有...

    Android平台调用WebService详解

    在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包,主要用于资源受限制的Java环境如Applets或J2ME应用程序(CLDC/ CDC/MIDP)。认真读完对ksoap2的介绍你会发现并...

    两个小时精通Android开发之界面篇

    Android平台除了在一些接口上采用了和J2ME不一样的名称之外,基本的接口内容还是一样的,那么移植J2ME到Android平台最方便的方法就是利用Android平台的接口重写J2ME的接口,本着这个思路笔者写了一个Wrap包,利用这...

Global site tag (gtag.js) - Google Analytics