File 访问本地文件夹加载变换图片
package view { import comm.NodeConst; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.Shape; import flash.display.SimpleButton; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.filesystem.File; import flash.geom.Rectangle; import flash.net.URLRequest; import flash.text.TextField; import flash.text.TextFieldType; import flash.utils.Timer; public class MainView extends Sprite { private var roX:int = 5; private var swX:int = 5; private var swY:int = 50; private var txtW:int = 400; private var txtH:int = 40; private var txtBgBorder:uint = 0xff0000; private var txtBgColor:uint = 0xcccccc; private var isBoolean:Boolean = true; private var txtType:String = TextFieldType.INPUT; /** * isText true为人物,false为武器 */ private var isText:Boolean; private var roleText:TextField; private var aimFolderList :Array = []; // private var aimFolderList :Array = ["attack", "dead", "run", "stand", "cast"]; private var swordText:TextField; private var sprite:Sprite; private var arr:Array; private var s_arr:Array; private var srcFile:File; private var num:int; private var nameArr:Array; private var pathArr:Array; private var imgNameArr:Array; private var maxCount:int; public function MainView() { init(); } private function init():void { textBox_role(); textBox_sword(); btnRole(); btnSword(); btnPlay(); s_imgContainer(); imageContainer(); change_frameRate_txt(); for (var j:int = 0; j < 9; j++) { var c_btn:SimpleButton = btnControlArr(j); c_btn.x = 570 + int(j % 3) * (c_btn.width + 30); c_btn.y = 380 + int(j / 3) * (c_btn.height+ 30); if(j > 4){ c_btn.name = "btn" + (j-1); }else c_btn.name = "btn" + j; if(j == 4){"这个不要!"} else this.addChild( c_btn ); c_btn.addEventListener(MouseEvent.CLICK,toBtnfaceHandler); } txtHelp(); } private function txtHelp():void { var txt:TextField = new TextField(); txt.text = "attack cast dead run stand"; txt.textColor = 0xff0000; this.addChild( txt ); txt.height = 20; txt.width = 200; txt.selectable = false; txt.x = 550,txt.y = 170; } /** * 角色(文本) * 选择角色文件路径的显示器 */ private function textBox_role():void { roleText = new TextField(); this.addChild(roleText); roleText.x = roleText.y = roX; roleText.width = txtW; roleText.height = txtH; roleText.border = isBoolean; roleText.borderColor = txtBgBorder; roleText.background = isBoolean; roleText.backgroundColor = txtBgColor; roleText.type = txtType; } /** * 角色武器(文本) * 选择角色的武器图片路径的显示器 */ private function textBox_sword():void { swordText = new TextField(); this.addChild(swordText); swordText.x = swX; swordText.y = swY; swordText.width = txtW; swordText.height = txtH; swordText.border = true; swordText.borderColor = txtBgBorder; swordText.background = isBoolean; swordText.backgroundColor = txtBgColor; swordText.type = txtType; } /** * 浏览按钮 * 《选择角色》 */ private function btnRole():void { var spr:Sprite = _graphics(0xFF00FF,0,0,70,40); _btnRole = new SimpleButton(spr,spr,spr,spr); var txt:TextField = new TextField(); txt.selectable = false; txt.text = "选择角色"; txt.width = 50; txt.height = 20; this.addChild( _btnRole ); spr.addChild( txt ); spr.x = 450; spr.y = 5; _btnRole.addEventListener(MouseEvent.CLICK,toBtnRoleHandler); } /** * 选择角色按钮 * @param event */ private function toBtnRoleHandler(event:MouseEvent):void { f_file(); isText = true; } /** * 浏览按钮 * 《选择角色武器》 */ private function btnSword():void { var spr:Sprite = _graphics(0xFF00FF,0,0,70,40); _btnSword = new SimpleButton(spr,spr,spr,spr); this.addChild( _btnSword ); var txt:TextField = new TextField(); txt.selectable = false; txt.text = "选择武器"; txt.height = 20; spr.addChild( txt ); spr.x = 450; spr.y = 50; _btnSword.addEventListener(MouseEvent.CLICK,toBtnSwordHandler); } private function toBtnSwordHandler(event:MouseEvent):void { f_file(); isText = false; } /** * play按钮 * 播放动画的按钮 */ private function btnPlay():void { var spr:Sprite = _graphics(0xFF0000,0,0,85,85); btn = new SimpleButton(spr,spr,spr,spr); this.addChild( btn ); var txt:TextField = new TextField(); txt.text = "play Go"; txt.height = 20; spr.addChild( txt ); txt.selectable = false; spr.x = 550; spr.y = 5; btn.addEventListener(MouseEvent.CLICK,toBtnPlayHandler); } /** * 图片的容器 * 角色的容器 */ private function imageContainer():void { sprite = new Sprite(); this.addChild( sprite ); sprite.x = 5; sprite.y = 100; } private function s_imgContainer():void { spr = new Sprite(); this.addChild( spr ); spr.x = 5; spr.y = 100; } /** * 选择 状态 按钮 * 选择人物打斗的形式 */ private function selectBox():SimpleButton { var spr:Sprite = _graphics(0x0ffe0,0,0,20,20); var btn:SimpleButton = new SimpleButton(spr,spr,spr,spr); this.addChild( btn ); return btn; } /** * 帧频输入框 * 修改动作帧频速度 */ private function change_frameRate_txt():void { frameText = new TextField(); frameText.text = String(frameNum); this.addChild(frameText); frameText.x = 550; frameText.y = 250; frameText.width = 150; frameText.height = 40; frameText.border = true; frameText.borderColor = txtBgBorder; frameText.background = isBoolean; frameText.backgroundColor = txtBgColor; frameText.type = txtType; } /** * 8个按钮 * 控制人物和武器的方向 */ private function btnControlArr(_i:int):SimpleButton { var spr:Sprite = _graphics(0x0fef0e,0,0,30,30); var txt:TextField = new TextField(); txt.width = spr.width; txt.height = spr.height; spr.addChild( txt ); switch(_i) { case 0: txt.text = "↖"; break; case 1: txt.text = "↑"; break; case 2: txt.text = "↗"; break; case 3: txt.text = "←"; break; case 5: txt.text = "→"; break; case 6: txt.text = "↙"; break; case 7: txt.text = "↓"; break; case 8: txt.text = "↘"; break; } var btn:SimpleButton = new SimpleButton(spr,spr,spr,spr); return btn; } private function _graphics(_color:uint,_x:int,_y:int,_w:int,_h:int):Sprite { var spr:Sprite = new Sprite(); spr.graphics.beginFill(_color); spr.graphics.drawRect(_x,_y,_w,_h); spr.graphics.endFill(); this.addChild( spr ); return spr; } private function toBtnPlayHandler(event:MouseEvent):void { var len:int = bitmapDataList.length; var _len:int= _bitmapDataList.length; if(len > 0 || _len > 0) startTimer(); } private function startTimer():void { btn.removeEventListener(MouseEvent.CLICK,toBtnPlayHandler); frameNum = Number(frameText.text); timer = new Timer(frameNum); timer.addEventListener(TimerEvent.TIMER,toTimerHandler); timer.start(); isFit = frameNum; } private function toBtnHandler(event:MouseEvent):void { isScale = false; switch(event.target.name) { //"attack" case "btn0": actionNum = 8; fileIndex = 0; rightNum = 0; cleanBitmapData(); changeAction(); _changeAction(); break; //"cast" case "btn1": actionNum = 8; fileIndex = 1; rightNum = 0; cleanBitmapData(); changeAction(); _changeAction(); break; //"dead" case "btn2": actionNum = 4; fileIndex = 2; rightNum = 0; cleanBitmapData(); changeAction(); _changeAction(); break; //"run" 4 case "btn3": actionNum = 12; fileIndex = 3; rightNum = 0; cleanBitmapData(); changeAction(); _changeAction(); break; //"stand" case "btn4": actionNum = 4; fileIndex = 4; rightNum = 0; cleanBitmapData(); changeAction(); _changeAction(); break; } } /** * =========== 8按钮 8个方向 ========== * 40-8 20-4 60-12 20-4 40-8 * "attack", "dead", "run", "stand", "cast" */ private function toBtnfaceHandler(event:MouseEvent):void { // 左下 1 下 2 上 3 左上 4 左 5 var len:int = bitmapDataList.length; var result:int = len / NodeConst.TOTAL; switch(event.target.name) { case "btn0": isScale = false; left_right_loction(); break; case "btn1": up_loction(); break; case "btn2": isScale = true; left_right_loction(); break; case "btn3": isScale = false; left_loction(); break; case "btn4": isScale = true; left_loction(); break; case "btn5": isScale = false; left_down_loction(); break; case "btn6": down_loction(); break; case "btn7": isScale = true; left_down_loction(); break; } } private function count():int { var len:int; if(isText)len= bitmapDataList.length; else len = _bitmapDataList.length; return len / NodeConst.TOTAL; } /** * left——up right——up */ private function left_right_loction():void { var result:int = count(); num = result * NodeConst.THREE + 1; actionNum = result * NodeConst.FOUR; rightNum = num; } /** * UP */ private function up_loction():void { var result:int = count(); num = result * NodeConst.TWO + 1; actionNum = result * NodeConst.THREE; rightNum = num; } /** * DOWN */ private function down_loction():void { var result:int = count(); num = result * NodeConst.ONE + 1; actionNum = result * NodeConst.TWO; rightNum = num; } /** * left right */ private function left_loction():void { var result:int = count(); num = result * NodeConst.FOUR + 1; actionNum = result * NodeConst.FIVE; rightNum = num; } /** * left_down right_down */ private function left_down_loction():void { var result:int = count(); num = 0; actionNum = result * NodeConst.ONE; rightNum = num; } /** * 清理bitmapData */ private function cleanBitmapData():void { bitmapDataList = []; _bitmapDataList = []; } /** * 打开本地文件夹的代码 */ private function f_file():void { var file:File = new File(); file.browseForDirectory("请选择您的文件夹"); file.addEventListener(Event.SELECT,toSelectHandler); } /** * 1.创建页面 * 2.选择文件夹按钮 添加监听 两个 * 3.打开文件把路径放入文本框 * 4.选择文件放到数组里保存起来 * 5.截取初始状态的图片放到sprite里 * 6.点击按钮播放 * 7.监听选择攻击、防御等各动作按钮 * 8. */ private function toSelectHandler(event:Event):void { var eFile:File = event.currentTarget as File; var path:String = eFile.nativePath; var tmpDir:File = new File(path); maxCount = tmpDir.getDirectoryListing().length; var tmpArr:Array = tmpDir.getDirectoryListing(); var len:int = tmpArr.length; for (var i:int = 0; i < len; i++) { var tmpStr:String = tmpArr[i].nativePath; var _str:String = tmpArr[i].parent.nativePath; var _arr:Array = tmpStr.split(_str + "\\"); aimFolderList[i] = _arr[1]; } var aimLen:int = aimFolderList.length; if(aimLen < 5){ if(aimFolderList[0] != null){ if(aimFolderList[0] != "attack")aimFolderList.unshift(""); } if(aimFolderList[1] != null){ if(aimFolderList[1] != "cast")aimFolderList.splice(1,0,""); } if(aimFolderList[2] != null){ if(aimFolderList[2] != "dead")aimFolderList.splice(2,0,""); } if(aimFolderList[3] != null){ if(aimFolderList[3] != "run")aimFolderList.splice(3,0,""); } if(aimFolderList[4] != null){ if(aimFolderList[4] != "stand")aimFolderList.splice(4,0,""); } } if(aimFolderList[0] != "attack" && aimFolderList[1] != "cast" && aimFolderList[2] != "dead" && aimFolderList[3] != "run" && aimFolderList[4] != "stand"){ trace("come on !!!"); return; } if(isText){ if(roleText.text == path || roleText.text != "" || swordText.text == path)return; roleText.text = path; } else { if(swordText.text == path || swordText.text != "" || roleText.text == path)return; swordText.text = path; } for (var j:int = 0; j < 5; j++) { if(aimFolderList[j] == ""){ s_btn = selectBox(); s_btn.name = "btn" + j; s_btn.x = 550 + (s_btn.width + 20) * j; s_btn.y = 200; s_btn.visible = false; }else{ s_btn = selectBox(); s_btn.x = 550 + (s_btn.width + 20) * j; s_btn.name = "btn" + j; s_btn.y = 200; s_btn.addEventListener(MouseEvent.CLICK,toBtnHandler); } } //加载出来第一个图片,显示在img中 fileDir = new File(path + "\\" + aimFolderList[fileIndex] + "\\"); while(!fileDir.exists) { //防止某个目录不存在 fileIndex ++; if(fileIndex >= maxCount)break; // fileDir = new File(filePath.text + "\\" + aimFolderList[fileIndex] + "\\"); } //检查是否合法的目录 if (fileIndex >= maxCount) { trace("目录不合法!至少需要包含一个动作目录。"); return ; } if(isText)changeAction(); else _changeAction(); } /** * 改变人物的动作 */ private function changeAction():void { var showFile:File; showFile = new File(roleText.text + "\\"+ aimFolderList[fileIndex] +"\\"); if(showFile.exists){ arr = showFile.getDirectoryListing(); var len:int = arr.length; for (var i:int = 0; i < len; i++) { var f:File = arr[i]; if(f.extension != "png")arr.pop(); } loaderImgBitmap(arr); } } /** * 改变武器动作 */ private function _changeAction():void { var showFile:File; showFile = new File(swordText.text + "\\"+ aimFolderList[fileIndex] +"\\"); if(showFile.exists){ s_arr = showFile.getDirectoryListing(); var len:int = 5; for (var i:int = 0; i < len; i++) { var f:File = s_arr[i]; if(f.extension != "png")s_arr.pop(); } _loaderImgBitmap(s_arr); } } /** * 控制图片运动的 Timer * @param event */ private var rightNum:int = 0; private function toTimerHandler(event:TimerEvent):void { frameNum = Number(frameText.text); if(isFit != frameNum){ btn.addEventListener(MouseEvent.CLICK,toBtnPlayHandler); timer.stop(); timer.removeEventListener(TimerEvent.TIMER,toTimerHandler); timer = null; } num++; if(num >= actionNum)num = rightNum; bitmapChild(( bitmapDataList[num] as BitmapData)); _bitmapChild((_bitmapDataList[num] as BitmapData)); } /** * 加载人物数组内所有路径 * @param urlArr 所有人物图片路径的数组 */ private function loaderImgBitmap(urlArr:Array):void { var len:int = urlArr.length; for (var i:int = 0; i < len; i++) { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler(i)); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); var request:URLRequest = new URLRequest((urlArr[i] as File).nativePath); loader.load(request); } } /** * 加载武器数组内所有路径 * @param urlArr 所有武器图片路径的数组 */ private function _loaderImgBitmap(urlArr:Array):void { var len:int = urlArr.length; for (var i:int = 0; i < len; i++) { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandlers(i)); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); var request:URLRequest = new URLRequest((urlArr[i] as File).nativePath); loader.load(request); } } /** * 人物 bitmapData Array */ private var bitmapDataList:Array = []; /** * 武器 bitmapData Array */ private var _bitmapDataList:Array = []; private var timer:Timer; /** * 本地文件夹 参数 "attack", "dead", "run", "stand", "cast" */ private var fileIndex:int = 0; private var fileDir:File; /** * 人物动作初始值 */ private var actionNum:int = 8; /** * 武器的sprite */ private var spr:Sprite; /** * 人物 == 加载完成 * @param i 带来的参数 * @return Function */ private function completeHandler(i:int):Function{ return function (event:Event):void { var loader:Loader = Loader(event.target.loader); var image:Bitmap = Bitmap(loader.content); bitmapDataList[i] = image.bitmapData; bitmapChild(bitmapDataList[0]); } } /** * 剑 == 加载完成 * @param i 带来的参数 * @return Function */ private function completeHandlers(i:int):Function{ return function (event:Event):void { var loader:Loader = Loader(event.target.loader); var image:Bitmap = Bitmap(loader.content); _bitmapDataList[i] = image.bitmapData; _bitmapChild(_bitmapDataList[0]); } } /** * 是否缩放 */ private var isScale:Boolean; private var frameNum:Number = 24; private var isFit:Number; private var frameText:TextField; private var btn:SimpleButton; private var _btnRole:SimpleButton; private var _btnSword:SimpleButton; private var s_btn:SimpleButton; /** * 人 * @param bitmapData */ private function bitmapChild(bitmapData:BitmapData):void { var bitmap:Bitmap = new Bitmap(bitmapData); if(isScale){ bitmap.scaleX = -1; bitmap.x = bitmap.x + bitmap.width; } sprite.addChild( bitmap ); if(sprite.numChildren==2)sprite.removeChildAt(0); } /** * 剑 * @param bitmapData */ private function _bitmapChild(bitmapData:BitmapData):void { var _bitmap:Bitmap = new Bitmap(bitmapData); if(isScale){ _bitmap.scaleX = -1; _bitmap.x = _bitmap.x + _bitmap.width; } spr.addChild( _bitmap ); if(spr.numChildren==2)spr.removeChildAt(0); } /** * image加载发生错误 * @param event */ private function ioErrorHandler(event:IOErrorEvent):void { // var _urlStr:String = (event.currentTarget as LoaderInfo).url; // var tempArr:Array = _urlStr.split("file:///"); // pathArr = (tempArr[1] as String).split("/"); // imgNameArr = (pathArr[4] as String).split("."); // nameArr = (imgNameArr[0] as String).split(""); } } }
package comm { public class NodeConst { public function NodeConst() { } public static const ONE:int = 1; public static const TWO:int = 2; public static const THREE:int = 3; public static const FOUR:int = 4; public static const FIVE:int = 5; public static const TOTAL:int = 5; } }
package { import flash.display.Sprite; import view.MainView; [SWF (width="760", height="620",backgroundColor="0x000000")] public class fileDemo extends Sprite { public function fileDemo() { var main:MainView = new MainView(); this.addChild( main ); } } }
说明:自己写的代码,很乱!自己也值得,好好努力,以后会写好的。加油!只是为先备份一下。方便以后利用!