游戏制作者 - 如何使用2d数组导航地图

时间:2016-09-30 20:48:32

标签: arrays multidimensional-array game-maker gml

我必须制作一个可导航的地图 起点在中心 有三个世界+最后阶段 按下我必须从基地导航到第一世界的第一级,并在第二和第三级进入下一级 按下我已经从第三个到第二个,从第二个到第一个级别,从世界的第一个级别到基地 左右按我必须改变世界

现在: 我已经使用不同的方法制作了很多菜单,但总是使用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();
    }
}

如何将第一种方法转换为de sencond需要??

1 个答案:

答案 0 :(得分: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,它允许您将每个位置的所有信息存储在一个数据结构中。例如

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