⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maps.as

📁 actionscript3做的RPG游戏DEMO及AS3源码
💻 AS
字号:
/*
=================================================================================================
地图类,功能分为以下几个方面:
1,根据接受的地图数据生成地图,包括各个地图元素和人物。
2,根据鼠标的点击,计算出点击的X和Y值【X和Y对应地图数组的索引】。通过SearchRoad类找出路径,并发出WalkEvent事件,
   由GameHuman类的实例侦听。
	
=================================================================================================
*/
package com.kamon.Astar{
	import flash.display.Sprite;
	import flash.utils.getDefinitionByName;
	import flash.events.MouseEvent;
	public class Maps extends Sprite {
		private var isoW:uint;//地图元素的宽度
		private var isoH:uint;//地图元素的高度
		private var nowX:uint;//地图中人物的初始X值,X和Y代表地图数组中的索引
		private var nowY:uint;//地图中人物的初始Y值
		private var nowId:uint;//地图编号
		private var mapArray:Array;//地图数组
		private var eleArray:Array;//地图元素数组
		private var walkArray:Array;//定义一个用来接受路径的数组
		private var human:GameHuman;//定义一个人物类
		private var foeman:Foeman;//定义一个敌人类
	    private var isNotClick:Boolean;
		//=================================================================================================
		////参数含义:地图中人物的X值,人物的Y值,地图数据,元素数据,地图中的出入口数据
		public function Maps(nx:uint,ny:uint,mArray:Array,eleArr:Array,id:uint) {
			nowX=nx;
			nowY=ny;
			mapArray=mArray;
			eleArray=eleArr;
			nowId=id;
			init();

		}
		//=================================================================================================
		//生成地图函数
		private function createMaps() {
			var mapBg:Sprite=new eleArray[0]();
			var mapEle:Sprite;
			mapBg.mouseEnabled=false;
			addChild(mapBg);
			var mapY:uint=mapArray.length;
			var mapX:uint=mapArray[0].length;
			for (var a:uint=0; a < mapY; a++) {
				for (var b:uint=0; b < mapX; b++) {
					if (a==nowX&&b==nowY) {
						human=new GameHuman(nowX,nowY,nowId);
						human.x=(isoW/2)*(nowX-nowY);
						human.y=(isoH/2)*(nowX+nowY);
						x=MapData.STAGE_X/2-human.x;
						y=MapData.STAGE_Y/2-human.y;
						addChild(human);
					}
					//------------------------------------------------------------
					//创建四个不受你控制的人物,如果觉得占用CPU,就注释掉。
					else if(a%8==0&&b%8==0&&a==b){
						foeman=new Foeman(a,b,mapArray);
						foeman.x=0;
						foeman.y=isoH*a;
						addChild(foeman);
					}
					//------------------------------------------------------------
					mapEle=new eleArray[mapArray[a][b]+1]();
					mapEle.name="element"+b+"_"+a;
					mapEle.x = (isoW/2)*(b-a);
					mapEle.y = (isoH/2)*(b+a);
					mapEle.mouseEnabled=false;
					addChild(mapEle);
				}
			}
			cacheAsBitmap=true;
		}
		//=================================================================================================
		private function init():void {
			isoW=MapData.ISO_W;
			isoH=MapData.ISO_H;
			isNotClick=true;
			//this.mouseChildren=false;
			addEventListener(MouseEvent.MOUSE_DOWN,mouseClick);
			addEventListener(NotClickEvent.WALK_END,setIsNotClick);
			createMaps();
		}
		//=================================================================================================
		private function mouseClick(evt:MouseEvent):void {
			//获得单击鼠标时,鼠标的X和Y值
			if(evt.target==this){
			var clickedX:int = Math.floor(evt.localX/MapData.ISO_W+evt.localY/MapData.ISO_H);
			var clickedY:int = Math.floor(evt.localY/MapData.ISO_H-evt.localX/MapData.ISO_W);
			nowX=human.nowXindex;
			nowY=human.nowYindex;
				if (mapArray[clickedY][clickedX]==0&&isNotClick) {
					isNotClick=false;
					var walkEvent:WalkEvent=new WalkEvent();
					walkEvent.walkArray=SearchRoad.startSearch(mapArray,clickedX,clickedY,nowX,nowY);
					addEventListener(WalkEvent.WALK_START,human.walking);
					dispatchEvent(walkEvent);
					removeEventListener(WalkEvent.WALK_START,human.walking);
				}
			}
		}
		private function setIsNotClick(evt:NotClickEvent){
			isNotClick=true;
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -