2016-09-30 10 views
1

でマップをナビゲートする方法を私は+最終段階 を押し上げる3つの世界は、私はにベースから移動する必要があるの出発点は、中央 である航行マップ をしなければなりません最初の世界の最初のレベルと2番目と3番目の次のレベルに行く 私は3番目から2番目に、2番目から1番目のレベルに移動していると、世界の最初のレベルからベースに 右私は世界を変えなければならないゲームメーカー - 2次元配列

今: 私はすでにさまざまな方法を使ってたくさんのメニューを作っていますが、常に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; } 
} 

私はこれをした2次元配列 にナビゲートする必要があり、この時間は:

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(); 
    } 
} 

を最初のメソッドをde sencond needに変換するには??

答えて

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マップナビゲーションシステムの観点では、2D配列を使用することが有益ではないかもしれませんし、代わりにあなたはどのds_mapを使用することができます各ロケーションのすべての情報を1つのデータ構造に格納することができます。例えば、その後

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