/* * 文件名:地图拼接 * 创建人:Clark/陈泽丹 * 创建时间: 20120306 */ package Src.Tool { import Src.Tool.Imager; import flash.geom.Point; import flash.display.BitmapData; public class FileImgers { private var m_Imager:Array = null; private var W_SIZE:int = 0; private var H_SIZE:int = 0; private const UnitW:int = 800; private const UnitH:int = 600; private const SceneW:int = 800; private const SceneH:int = 600; private const W_NUM_LIMIT:int = SceneW/UnitW +1; private const H_NUM_LIMIT:int = SceneH/UnitH +1; public function FileImgers(_szFilePath:String, _iWSize:int, _iHSize:int) { // constructor code W_SIZE = _iWSize; H_SIZE = _iHSize; m_Imager = new Array(); const iSize:int = _iWSize*_iHSize; for(var i:int = 0; i<iSize; i = i+1) { m_Imager[i] = new Imager(_szFilePath + "\\" + i + ".jpg"); } } public function Delete() { for(var i:int = 0; i<m_Imager.length; i++) { m_Imager[i].Delete(); m_Imager[i] = null; } m_Imager = null; } public function drawScene(_destImg:BitmapData, _iWorldX:int, _iWorldY:int) { var ImgID:Point = WorldPos2ImgID(_iWorldX, _iWorldY); var vImgIDs:Array = getSceneImgIDs(ImgID.x, ImgID.y); for(var i:int = 0; i<vImgIDs.length; i++) { var pt:Point = getImgWorldPos(vImgIDs[i]) var ptImg:Point = new Point(pt.x-_iWorldX, pt.y - _iWorldY) m_Imager[vImgIDs[i]].drawImg(_destImg, ptImg); } } private function WorldPos2ImgID(_iWorldX:int, _iWorldY:int):Point { var ImgIDX:int = _iWorldX/UnitW; var ImgIDY:int = _iWorldY/UnitH; return new Point(ImgIDX, ImgIDY) } private function getImgWorldPos(_iImgID:int):Point { var iImgIDx:int = _iImgID%W_SIZE; var iImgIDy:int = _iImgID/W_SIZE; return new Point(iImgIDx*UnitW, iImgIDy*UnitH); } private function getSceneImgIDs(_iStartImgIDX:int, _iStartImgIDY:int):Array { var pIDs:Array = new Array() for(var i:int = 0; i<H_NUM_LIMIT; i++) { for(var j:int = 0; j<W_NUM_LIMIT; j++) { var wTmp:int = _iStartImgIDX + j; var hTmp:int = _iStartImgIDY + i; if( wTmp < W_SIZE && hTmp < H_SIZE) { var vTmp:int = hTmp * W_SIZE + wTmp; if( vTmp >= 0 && vTmp<W_SIZE*H_SIZE) { pIDs[pIDs.length] = vTmp } } } } return pIDs; } } }
package Src.Scene.MainScene { import flash.system.System; import Src.Main; import Src.Tool.Swfer; import Src.Tool.Imager; import Src.Tool.FileImgers; import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Point; import flash.events.MouseEvent; import flash.geom.Rectangle; public class MainScene { private var m_Swfer:Swfer = null; private var m_SceneImg:Imager = null; private var m_FileImgs:FileImgers = null; private var m_WorldPos:Point = null; private var m_rectScene:Rectangle = null; public static function CreateObj() { return new MainScene(); } public function MainScene() { // constructor code m_Swfer = new Swfer("Src\\Res\\MainSceneRes\\boat.swf",InitBoat); m_SceneImg = new Imager(); m_FileImgs = new FileImgers("Src\\Res\\MainSceneRes\\BK",4,4); m_WorldPos = new Point(1600,1600); m_rectScene = new Rectangle(0,0,800,600); Main.g_MainScene.addEventListener(MouseEvent.CLICK, Click); } public function Delete() { Main.g_MainScene.removeEventListener(MouseEvent.CLICK, Click); m_Swfer.Delete(); m_Swfer = null; m_SceneImg.Delete() m_SceneImg = null; m_FileImgs.Delete(); m_FileImgs = null; m_WorldPos = null; m_rectScene = null; } public function Click(evt:MouseEvent) { var xTmp:int = evt.localX - m_Swfer.m_Swf.x; var yTmp:int = evt.localY - m_Swfer.m_Swf.y; m_WorldPos.x = m_WorldPos.x + xTmp; m_WorldPos.y = m_WorldPos.y + yTmp; //trace(evt.localX, evt.localY); } public function InitBoat() { m_Swfer.m_Swf.x = 350; m_Swfer.m_Swf.y = 300; } public function drawScene() { Main.g_MainScene.graphics.beginFill(0x000000); const x:int = flash.system.Capabilities.screenResolutionX; const y:int = flash.system.Capabilities.screenResolutionY; Main.g_MainScene.graphics.drawRect(0, 0, x, y); Main.g_MainScene.graphics.endFill(); m_SceneImg.m_Img.bitmapData.fillRect(m_rectScene,0x000000); m_FileImgs.drawScene(m_SceneImg.m_Img.bitmapData, m_WorldPos.x,m_WorldPos.y); Main.g_MainScene.addChild(m_SceneImg.m_Img); m_Swfer.drawSwf(Main.g_MainScene); } } }
package Src.Tool { import flash.display.Loader; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; public class Swfer extends Sprite { private var m_Loader:Loader = null; private var m_InitFun:Function = null; private var m_szUrl:String = null; public var m_Swf:MovieClip = null; public function Swfer(_szUrl:String, _funInit:Function = null) { // constructor code m_szUrl = _szUrl m_InitFun = _funInit; m_Loader = new Loader(); m_Loader.load(new URLRequest(m_szUrl)); m_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); } public function Delete() { m_Loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete); m_Loader = null; m_InitFun = null; m_szUrl = null; m_Swf = null; } private function onComplete(_evt:Event):void { m_Swf = _evt.target.content as MovieClip; if( null == m_Swf) { trace("下载" + m_szUrl + "文件失败!"); } m_Loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete); m_Loader = null; if( null != m_InitFun) { m_InitFun(); m_InitFun = null; } } public function drawSwf(_Scene:Sprite) { if( null != m_Swf) { _Scene.addChild(m_Swf); } } } }
package Src.Tool { import flash.geom.Point; import flash.geom.Rectangle; import flash.events.Event; import flash.net.URLRequest; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; public class Imager { private var m_Loader:Loader = null; private var m_InitFun:Function = null; private var m_szUrl:String = null; public var m_Img:Bitmap = null; public function Imager(_szUrl:String = null, _funInit:Function = null) { // constructor code m_szUrl = _szUrl; m_InitFun = _funInit; if (null == m_szUrl) { var pBD:BitmapData = new BitmapData(800,600,true,0x000000); m_Img = new Bitmap(pBD); if (null != m_InitFun) { m_InitFun(); m_InitFun = null; } } else { m_Loader = new Loader(); m_Loader.load(new URLRequest(m_szUrl)); m_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); } } public function Delete() { m_Loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete); m_Loader = null; m_InitFun = null; m_szUrl = null; m_Img = null; } private function onComplete(_evt:Event):void { m_Img = Bitmap(_evt.target.content); if (null == m_Img) { trace("下载" + m_szUrl + "文件失败!"); } m_Loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete); m_Loader = null; if (null != m_InitFun) { m_InitFun(); m_InitFun = null; } } public function drawImg(_destImg:BitmapData, _destPos:Point, _srcRect:Rectangle = null) { if (null != m_Img) { if (null == _srcRect) { _srcRect = new Rectangle(0,0,m_Img.bitmapData.width,m_Img.bitmapData.height); } _destImg.copyPixels(m_Img.bitmapData, _srcRect, _destPos); } } } }
package Src { import flash.display.Sprite; import flash.utils.Timer; import flash.events.TimerEvent; public class Main extends Sprite { private const m_RefreshTimer:Timer = new Timer(100,0); private var m_SceneItems:SceneItems = null; public static const g_MainScene:Sprite = new Sprite(); public function Main():void { // constructor code this.graphics.clear(); this.addChild(g_MainScene); m_SceneItems = new SceneItems("MainScene"); m_RefreshTimer.addEventListener(TimerEvent.TIMER, onDrawTime); m_RefreshTimer.start(); } public function onDrawTime(evt:TimerEvent) { m_SceneItems.drawScene(); } } } import Src.Main; import Src.Scene.MainScene.MainScene class SceneItems { private const g_SceneItems:Object = new Object(); private var g_CurItem:Object = null; public function SceneItems(_szCurScene:String):void { // constructor code g_SceneItems["MainScene"] = MainScene.CreateObj; selectScene(_szCurScene); } public function selectScene(_szCurScene:String) { if (null != g_SceneItems[_szCurScene]) { trace("OK,访问场景 " + _szCurScene + " !"); clearScene(); if( null != g_CurItem) { g_CurItem.Delete(); } g_CurItem = g_SceneItems[_szCurScene](); } else { trace("Error,访问空场景 " + _szCurScene + " !"); } } public function clearScene() { //释放资源 g_CurItem = null; //清空屏幕 for (var i:int=Main.g_MainScene.numChildren-1; i>=0; i--) { Main.g_MainScene.removeChildAt(0); } Main.g_MainScene.graphics.clear(); } public function drawScene() { if( null != g_CurItem) { g_CurItem.drawScene(); } } }