`
一口三个汉堡
  • 浏览: 115961 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

实例9---我的地图

阅读更多

  实例9,在j2me中是使用了图层管理和地图图层,在android并没有这些,所以我用android的只是写了用于 android的图层管理器和地图图层,不过有些东西还没有实现,只实现了一些这个例子会用到的,还有setViewWindow的实现并没有完整,算法上可能会有些问题,虽然我没有测试出,如果有谁测试出来了,请告诉我,我会改正。

 下面给出这个例子的效果图和MainView的代码。




 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 stub
		setFocusable(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_Manager
		m_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[row][col] );
			}
		}
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		long 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 block
				e.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 block
				e.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);
	}
	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		start();
		
	}
	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		stop();
		
	}
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		this.keyCode = keyCode;
		return true;
	}


	

	
}
 

apk文件(将后缀改为apk):Demon_8.zip

源代码文件:Demon_8.rar

  • 大小: 11.8 KB
  • 大小: 12 KB
0
0
分享到:
评论

相关推荐

    topmap实例---清华网上游

    在本实例中,我们将探讨如何利用TopMap与C#编程语言相结合,构建一个针对清华大学的网上导航地图应用——“清华网上游”。 【TopMap与C#集成开发】 1. **接口开发**:TopMap提供了丰富的API接口,允许开发者通过C#...

    HTML+CSS+JS数据可视化大屏平台模板实例10-大数据地图

    在这个"HTML+CSS+JS数据可视化大屏平台模板实例10-大数据地图"中,我们将探讨如何利用这些技术将大量复杂的数据转化为直观且具有吸引力的地图展示。 首先,HTML(HyperText Markup Language)作为网页内容的结构...

    实例12--会动的地图

    标题“实例12--会动的地图”提示我们这是一个关于动态地图展示的实例,可能是通过编程实现的。在IT行业中,动态地图通常涉及到地理信息系统(GIS)技术,可能使用JavaScript库如Leaflet或D3.js,或者是专业的地图...

    计算机软件-编程源码-实例十--电子地图开发之GIS组件--Mapobject深入开发.zip

    计算机软件-编程源码-实例十--电子地图开发之GIS组件--Mapobject深入开发.zip

    HTML+CSS+JS数据可视化大屏平台模板实例30-智慧物联网+GIS地图通用模板

    本实例“HTML+CSS+JS数据可视化大屏平台模板实例30-智慧物联网+GIS地图通用模板”是专门为展示智慧物联网数据与GIS地图结合而设计的一个模板,适用于各种监控、分析和决策支持场景。 首先,HTML(超文本标记语言)...

    计算机软件-商业源码-实例十--电子地图开发之GIS组件--Mapobject深入开发.zip

    这个压缩包包含了一个实例,通过这个实例,我们可以学习如何深入地使用MapObject进行地图开发。 MapObject是一个强大的GIS开发工具,它可以被嵌入到各种Windows应用程序中,如Visual Basic、VC++或Delphi等,使得...

    echarts右键菜单实例 --- 不修改源码

    标题“echarts右键菜单实例 --- 不修改源码”表明我们将探讨如何在ECharts图表上添加右键菜单,而无需直接修改ECharts的源代码。这意味着我们将通过ECharts的API和事件监听来实现这一功能,这是一个常见的最佳实践,...

    arcMAP实用操作手册之实例1-6

    实例5讲解如何将地图布局导出为图像或PDF,以及如何设置打印参数,确保输出的地图满足专业标准和需求。 6. **实例6:地图服务发布** 最后一个实例将展示如何使用ArcMap将地图发布为Web服务,使得地图可以在线访问...

    基于Java的实例源码-Google地图JSP标签库.zip

    在本资源"基于Java的实例源码-Google地图JSP标签库.zip"中,我们可以深入探讨几个关键的IT知识点,主要集中在Java编程、JSP(JavaServer Pages)技术和Google地图API的应用。 首先,Java是一种广泛使用的面向对象的...

    Flex开发实例--学习必备

    #### 9. TitleWindow组件 - **TitleWindow** 是一个具有标题栏的窗口组件,常用于创建对话框或模态窗口。 - 可以设置其 `modal` 属性来控制窗口是否为模态。 #### 10. ViewStack组件 - **ViewStack** 组件可以用来...

    HTML+CSS+JS数据可视化大屏平台模板实例demo-安徽省地图大屏

    HTML+CSS+JS数据可视化大屏平台模板实例demo-安徽省地图大屏

    天地图开发实例

    "天地图开发实例"是一个基于Web的项目,它利用了天地图这一强大的地理信息系统平台,为开发者提供了一套具体的实践示例。这个实例主要展示了如何在天地图上进行各种自定义操作,以增强地图的交互性和功能。接下来,...

    基于Java的实例源码-用的在线地图浏览模块.zip

    在本压缩包“基于Java的实例源码-用的在线地图浏览模块.zip”中,包含的是一个使用Java语言实现的在线地图浏览模块。这个模块可能是为了帮助开发者集成地图功能到他们的应用程序中,使得用户能够方便地查看、导航或...

    串口编程实例5-8 项目源码

    - **GPS坐标处理**:将接收到的经纬度转换为可读格式,进行地图匹配或其他地理计算。 - **时间同步**:通过GPS获取准确的时间信息,可用于系统时间同步。 4. **第7章:智能安防报警系统** 串口可能用于连接...

    JavaScript应用实例-高德地图经纬度求实际距离.js

    JavaScript应用实例-高德地图经纬度求实际距离.js

    LBS之百度地图实例

    本篇文章将深入探讨“LBS之百度地图实例”,并分享如何在Android应用中集成和使用百度地图API。 首先,我们需要理解LBS的基本原理。LBS依赖于获取用户的地理位置信息,这通常是通过手机的GPS模块实现的。然而,如果...

    天地图的实例

    "天地图"是中国国家地理信息公共服务平台的重要组成部分,它提供了丰富的测绘地理信息数据,包括卫星影像、地形图、街景图...这个实例为初学者提供了一个很好的起点,帮助他们快速上手并理解天地图在实际项目中的运用。

Global site tag (gtag.js) - Google Analytics