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

小時候在任天堂上常玩[小精靈]、[坦克大戰]、[倉庫番]

這類型的遊戲移動方式,就是這篇會介紹的遊戲技巧

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

程式原理:

先將場景畫分為30*30的格子狀地圖

利用二維陣列來判斷可以行走的範圍

利用鍵盤監聽事件控制角色移動

註:有另外一種較為進階的製作方式(像素碰撞)

  有適合範例會在介紹這部分

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

//首先在元件庫內創造兩個元件,wall代表迷宮的牆,player就是玩家

move  
  

//宣告場景布置元素

var nowthis = this ;

//下面二維陣列主要是設定哪地圖上哪些地方是牆(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;
    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);
        }
    }
}

//創造玩家可控制移動的元件
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);

 

//keyCode   上:38,下:40,左:37,右:39

//下面function會在接收到鍵盤的事件後,先將預期索引傳入CheckMove做檢查

//再根據檢查結果的索引,移動玩家控制的元件
function KeyDownHanlder(me:KeyboardEvent):void{
    var KeyCodeNum : int = me.keyCode ;
    var TmpObj :Object = {IndexX:man['IndexX'],IndexY: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){
        return true;
    }else{
        return false;
    }
}

 

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

來看一下效果

 

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

FLA格式為CS5

原始檔

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

注意事項:

此種類型的遊戲,關鍵點還是在美術完成可視迷宮後

要怎麼去設計陣列以便符合美術的視覺設計

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

arrow
arrow

    全站熱搜

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