========================================

把兩個範例結合在一起

做出走過的地板會消失,不能往回走的進階迷宮

========================================

主要拿簡單走迷宮為藍本,增加進階的消失地板功能

//先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;
    }
}

========================================

來看一下效果,移動過後的地板會消失,並且變得不能行走

玩家必須仔細觀察可以行走的路線,不然就GG了

 

========================================

FLA格式為CS6

原始檔

========================================

注意事項:

這篇主要是激發大家將範例做不同演變的創意力

我介紹的多是小效果,小技巧,如何配置產生新產品才是功力

========================================

arrow
arrow
    全站熱搜

    法奇 發表在 痞客邦 留言(0) 人氣()