//先import Tween的類
import gs.plugins.*; import gs.*; import gs.easing.*;
TweenPlugin.activate([AutoAlphaPlugin]);
var nowthis = this ;
//用來紀錄迷宮構成的地板與牆的元件陣列 var MapObjArr:Array= [] ;
//下面二維陣列主要是設定哪地圖上哪些地方是牆(0),哪些地方可以走(1) var MapSpace:Array=[ [0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,1,1,1,0,0,0,0,0,1,1,0], [0,1,0,0,1,1,1,1,1,1,1,1,0], [0,1,0,0,0,0,0,0,0,0,0,1,0], [0,1,1,1,1,1,1,1,1,1,0,1,0], [0,0,0,0,0,0,0,1,0,0,0,1,0], [0,1,0,1,1,1,1,1,1,1,0,1,0], [0,1,0,1,1,1,1,1,1,1,0,1,0], [0,1,0,0,0,0,0,0,1,0,0,1,0], [0,1,0,1,1,1,1,1,1,0,0,1,0], [0,1,0,1,1,1,1,1,1,1,0,1,0], [0,1,0,1,1,1,1,1,1,1,0,1,0], [0,1,1,0,0,0,0,0,1,0,0,1,0], [0,1,1,1,1,1,1,1,1,1,0,1,0], [0,1,0,0,0,0,0,0,0,0,0,1,0], [0,1,0,1,0,0,0,0,0,0,0,1,0], [0,1,0,1,1,1,1,1,1,1,1,1,0], [0,0,0,0,0,1,0,0,0,0,0,0,0] ] var i : int = 0 ; var j : int = 0 ; var WallWdith : int = 30 ; var WallHeight : int = 30 ; var MapSpaceLength : int = MapSpace.length ;
//下面的迴圈用來將陣列內的迷宮樣子,布置到可視場景上 for (i = 0 ; i <MapSpaceLength;i++){ var TmpLength : int = MapSpace[i].length; MapObjArr[i]=[]; for (j=0 ; j<TmpLength;j++){ if (MapSpace[i][j] == 0){
//這邊是設定牆的物件 var TmpWall : Wall = new Wall(); nowthis.addChild(TmpWall); TmpWall.x = (i*30); TmpWall.y = (j*30); MapObjArr[i][j] = TmpWall ; }else{
//這邊是設定地板的物件 var TmpFloor : Floor = new Floor(); nowthis.addChild(TmpFloor); TmpFloor.x = (i*30); TmpFloor.y = (j*30); MapObjArr[i][j] = TmpFloor ; } } } var man : Player = new Player(); man['IndexX']=17; man['IndexY']=5; man.x = man['IndexX']*WallWdith; man.y = man['IndexY']*WallHeight; nowthis.addChild(man);
stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDownHanlder); function KeyDownHanlder(me:KeyboardEvent):void{ var KeyCodeNum : int = me.keyCode ;
//新增加TmpIndexX、TmpIndexY屬性,用來抓取地板元件的索引 var TmpObj :Object = {IndexX:man['IndexX'],IndexY:man['IndexY'],TmpIndexX:man['IndexX'],TmpIndexY:man['IndexY'],CheckArray:MapSpace}; if (KeyCodeNum == 38){ TmpObj['IndexY'] -=1; man['IndexY']=(CheckMove(TmpObj))?(man['IndexY']-1):(man['IndexY']); }else if (KeyCodeNum == 40){ TmpObj['IndexY'] +=1; man['IndexY']=(CheckMove(TmpObj))?(man['IndexY']+1):(man['IndexY']); }else if (KeyCodeNum == 37){ TmpObj['IndexX'] -=1; man['IndexX']=(CheckMove(TmpObj))?(man['IndexX']-1):(man['IndexX']); }else if (KeyCodeNum == 39){ TmpObj['IndexX'] +=1; man['IndexX']=(CheckMove(TmpObj))?(man['IndexX']+1):(man['IndexX']); } man.x = (man['IndexX']*WallWdith); man.y = (man['IndexY']*WallHeight); }
//用來檢查玩家預期走入的格子是否可以行走 function CheckMove(reObj:Object):Boolean{ if (reObj['CheckArray'][reObj['IndexX']][reObj['IndexY']] == 1){
//原本只單純回饋布林值的方法,新增加地板漸變與設置不可行走索引 TweenLite.to(MapObjArr[reObj['TmpIndexX']][reObj['TmpIndexY']], 1, {autoAlpha:0}); MapSpace[reObj['TmpIndexX']][reObj['TmpIndexY']]=0; return true; }else{ return false; } }
|