实例9---我的地图
实例9,在j2me中是使用了图层管理和地图图层,在android并没有这些,所以我用android的只是写了用于 android的图层管理器和地图图层,不过有些东西还没有实现,只实现了一些这个例子会用到的,还有setViewWindow的实现并没有完整,算法上可能会有些问题,虽然我没有测试出,如果有谁测试出来了,请告诉我,我会改正。下面给出这个例子的效果图和MainView的代码。
http://dl.iteye.com/upload/attachment/494831/32e5dc91-82c8-3696-8d2e-026478679469.png
http://dl.iteye.com/upload/attachment/494833/060e5f87-581f-3bd9-96b2-33177160f3ce.png
package com.wjh.demon_8;
import com.wjh.midp_me.AndroidLayerManager;import com.wjh.midp_me.AndroidSprite;import com.wjh.midp_me.AndroidTiledLayer;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.Log;import android.view.KeyEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.SurfaceHolder.Callback;public class MainView extends SurfaceView implements Callback,Runnable{int keyCode = 0;Thread gameThread = null;boolean isGame = true;SurfaceHolder holder = null;Paint backPaint = null;Paint forePaint = null;//具体游戏相关public AndroidTiledLayer m_TLayer;//管理场景public int m_aCells[][] = //存储m_TLayer中各cell的取值 {{2,2,3,2,2,2,2,2 ,2,2,3,2,2,2,2,2 },{ 2,3,2,4,3,4,3,2 ,2,2,3,2,2,2,2,2},{ 2,3,3,3,4,2,4,2 ,2,2,3,2,2,2,2,2 },{ 2,3,2,3,3,4,1,2 ,2,2,3,2,2,2,2,2},{2,4,3,3,3,3,4,2 ,2,2,3,2,2,2,2,2},{2,3,2,3,3,4,3,2 ,2,2,3,2,2,2,2,2},{2,3,3,4,1,3,3,2 ,2,2,3,2,2,2,2,2},{4,2,2,4,2,2,4,4 ,2,2,3,2,2,2,2,2},{4,2,2,4,2,2,4,4 ,2,2,3,2,2,2,2,2},{4,2,2,4,2,2,4,4 ,2,2,3,2,2,2,2,2},{4,2,2,4,2,2,4,4 ,2,2,3,2,2,2,2,2},{4,2,2,4,2,2,4,4 ,2,2,3,2,2,2,2,2},{4,2,2,4,2,2,4,4 ,2,2,3,2,2,2,2,2},{4,2,2,4,2,2,4,4 ,2,2,3,2,2,2,2,2},{4,2,2,4,2,2,4,4 ,2,2,3,2,2,2,2,2},{4,2,2,4,2,2,4,4 ,2,2,3,2,2,2,2,2}};public AndroidLayerManager m_Manager;//图层管理器,管理各个图层public int m_nX = 0;//显示区域左上角的横坐标public int m_nY = 0; //显示区域左上角的纵坐标public MainView(Context context) {super(context);// TODO Auto-generated constructor stubsetFocusable(true);getHolder().addCallback(this);holder = this.getHolder();backPaint = new Paint();backPaint.setColor(Color.BLACK);forePaint = new Paint();//具体游戏相关Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.map);//创建TiledLayer场景m_TLayer = new AndroidTiledLayer( 16, 16, image, 32, 32 ); //设置场景的位置m_TLayer.setPosition( 0, 0 );LoadMap();//将各个图层添入m_Managerm_Manager = new AndroidLayerManager();m_Manager.append(m_TLayer);//设置m_Manager的显示区域m_Manager.setViewWindow( m_nX, m_nY, getWidth(), getHeight() );}public void LoadMap(){//设置m_TLayer中各cell的值for( int row = 0; row < 16; row ++ ){for( int col = 0; col < 16; col ++ ){m_TLayer.setCell( row, col, m_aCells );}}}@Overridepublic void run() {// TODO Auto-generated method stublong startTime = System.currentTimeMillis();while(isGame){input();logic();doDraw();try {long endTime = System.currentTimeMillis();long sleepTime = endTime - startTime;if(sleepTime<100){Thread.sleep(sleepTime);}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//开始游戏主线程public void start(){if(gameThread == null){gameThread = new Thread(this);gameThread.start();}}//停止游戏主线程public void stop(){isGame = false;if(gameThread != null){try {gameThread.join();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//输入判断public void input(){switch(this.keyCode){case KeyEvent.KEYCODE_DPAD_UP:m_nY -= 5;break;case KeyEvent.KEYCODE_DPAD_DOWN:m_nY += 5;break;case KeyEvent.KEYCODE_DPAD_LEFT:m_nX -= 5;break;case KeyEvent.KEYCODE_DPAD_RIGHT:m_nX += 5;break;}m_Manager.setViewWindow(m_nX, m_nY, getWidth(), getHeight());this.keyCode = 0;}//逻辑判断public void logic(){}public void doDraw(){Canvas c = null;try{c = holder.lockCanvas();synchronized (holder) {paint(c);}}finally{if(c != null){holder.unlockCanvasAndPost(c);}}}//画图public void paint(Canvas canvas){//用黑色清屏canvas.drawRect(0, 0, getWidth(), getHeight(), forePaint);//从屏幕的(0,0)点开始显示图像m_Manager.paint(canvas, forePaint);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubstart();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubstop();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubthis.keyCode = keyCode;return true;}} apk文件(将后缀改为apk):Demon_8.zip
源代码文件:Demon_8.rar
页:
[1]