2016-09-30 77 views
1

我要做一個導航地圖 的起點是在中心 有三個世界+最後階段 按下我必須從基地導航到第一個世界的第一級和第二個和第三個下一個級別 按下我已經做了從第三個到第二個,從第二個到第一個層次,並從世界的第一個層次到基地 按左和對我必須改變世界遊戲製造商 - 如何導航與2D數組的地圖

現在: 我已經做了很多菜單使用不同的方法,但總是使用1D陣列

obj_menu: 創建事件:

///menu 
menu[0] = "new"; 
menu[1] = "load"; 
menu[2] = "exit"; 

space = 55; 
mpos = 0; 

步驟事件:

///move 
if(inputs) { 
    var move = 0; 
    move -= max(keyboard_check_pressed(vk_up),0); 
    move += max(keyboard_check_pressed(vk_down),0); 

    if(move != 0) {  
     mpos += move; 
     if(mpos < 0) { 
      mpos = array_length_1d(saveload) -1; 
     } 
     if(mpos > array_length_1d(saveload) -1) { 
      mpos = 0; 
     } 
    } 

    //push 
    if(keyboard_check_pressed(vk_enter)) { 
     scr_menu(); 
    } 
} 

scr_menu();

switch(mpos) { 
case 0: { scr_new_game(); break; } //new 
case 1: { scr_load_game(); break; } //load 
case 2: { game_end(); break; } //exit 
default: { break; } 
} 

這一次我有一個二維數組 導航我這樣做:

obj_map: 創建事件:

///navigation setup 
if(crash_to_base)  { lvl[0,0] = true } 
if(base_to_ruins_1)  { lvl[1,0] = true } 
if(ruins_1_to_ruins_2) { lvl[1,1] = true } 
if(ruins_2_to_ruins_3) { lvl[1,2] = true } 
if(base_to_city_1)  { lvl[2,0] = true } 
if(city_1_to_city_2) { lvl[2,1] = true } 
if(city_2_to_city_3) { lvl[2,2] = true } 
if(base_to_lab_1)  { lvl[3,0] = true } 
if(lab_1_to_lab_2)  { lvl[3,1] = true } 
if(lab_2_to_lab_3)  { lvl[3,2] = true } 
if(base_to_castle)  { lvl[4,0] = true } 
//posizione del menu 
mposh = 0; 
mposv = 0; 
mpos[mposv,mposh] = 0; 

步事件:

///map navigation 
if(inputs) { 
    moveh -= max(keyboard_check_pressed(vk_left),0); 
    moveh += max(keyboard_check_pressed(vk_right),0); 
    movev -= max(keyboard_check_pressed(vk_up),0); 
    movev += max(keyboard_check_pressed(vk_down),0); 

    if(moveh != 0) { 
     //mposh += move; 
    } 
    if(movev != 0) { 
     //mposv += move; 
    } 

    push = keyboard_check_pressed(vk_enter); 
    if(push) { 
     scr_map(); 
    } 
} 

如何將第一種方法翻譯成第二種需要?

回答

1

不太清楚你有什麼困難,也許你可以詳細說明問題是什麼?在一個側面說明但是您1D菜單導航代碼可以大大簡化爲:

mpos += keyboard_check_pressed(vk_up) - keyboard_check_pressed(vk_down); 

var len = array_length_1d(saveload); 
if (mpos < 0) { mpos = len - 1; } 
if (mpos > len - 1) { mpos = 0; } 

,並在2D地圖導航系統方面,它可能不利於使用二維數組,而是你可以使用一個ds_map這允許您在一個數據結構中存儲每個位置的所有信息。例如

var lvlMap = ds_map_create() 

lvlMap[?"base-title"] = "Base" 
lvlMap[?"base-travel-right"] = "crash" 
lvlMap[?"base-travel-left"] = "fortress" 

那麼當您嘗試移動左/右:

var next_location = lvlMap[?current_location+"-travel-"+direction] 
current_location = next_location