ds_grid_to_mp_grid

此函数将 DS 网格转换为 MP 网格,其中所有 0 值变为 " 空",所有其他值变为 " 已占用"。

可以提供可选的映射函数来确定 DS 网格中的哪些值应被视为 " 空 " 或 " 占用"。

注意 要从 MP 网格转换为 DS 网格,请参阅 mp_grid_to_ds_grid

警告DS 网格和 MP 网格 必须 具有相同的宽度和高度。如果网格尺寸不匹配,转换将失败并抛出错误 " 错误,网格尺寸不匹配"。

使用说明

映射函数 映射函数

传递给此函数的可选映射函数应采用以下参数:

参数类型描述
valueReal当前单元格中的值
xReal网格单元的 x 索引 / 位置
yReal网格单元的 y 索引 / 位置

 

语法:

ds_grid_to_mp_grid(ds_grid, mp_grid[, func]);

参数类型描述
ds_gridDS Grid要转换的 DS 网格
mp_gridMP Grid ID将数据写入的 MP 网格
funcFunction可选 要使用的映射函数

 

返回:

MP Grid ID

 

示例 1:基本用法

var _size = 10;
grd_data = ds_grid_create(_size, _size);
repeat(20)
{
    ds_grid_set(grd_data, irandom(_size-1), irandom(_size-1), choose(0, false, true, "7", 47));
}

mpg_data = mp_grid_create(0, 0, _size, _size, 16, 16);
ds_grid_to_mp_grid(grd_data, mpg_data);

上述代码首先使用 ds_grid_create 创建一个 10 个单元 x 10 个单元的 DS 网格 (在 _size 变量中初始化)。然后,它会将使用 choose 函数选择的 5 个可能值之一分配给网格中随机选择的 20 个单元格中的每一个。之后,它使用 mp_grid_create 创建 MP 网格,并通过调用 ds_grid_to_mp_grid 函数使用 DS 网格的内容填充它。包含 0false 的 DS 网格单元将在 MP 网格中标记为 " 空",包含 true"7"47 的单元将标记为 " 占据"。

 

示例 2:使用映射函数

width = 128;
height = 128;
cellsize = 4;

function occupied(value, x, y)
{
    switch(value)
    {
        case "Mountains":
        case "Water":
        case "Forest":
            return true;
        case "Grass":
            return false;
        default:
            return false;
    }
}

grd_level = ds_grid_create(width, height);
ds_grid_clear(grd_level, "Grass");
ds_grid_set_disk(grd_level, 60, 60, 20, "Water");
ds_grid_set_disk(grd_level, 100, 60, 20, "Mountains");
ds_grid_set_region(grd_level, 60, 100, 110, 110, "Forest");

mpg_level = mp_grid_create(0, 0, width, height, 4, 4);
ds_grid_to_mp_grid(grd_level, mpg_level, occupied);

上面的代码首先展示了如何使用映射函数的示例。首先,它将 widthheightcellsize 定义为实例变量,以及一个占用的occupied函数,如果该值为 "Mountains""Water""Forest" 之一,则返回 true; 如果该值为 "Grass" 或任何其他值,则返回 false。然后,它创建一个给定宽度和高度的 DS 网格 grd_level,并用几种地形类型填充它。之后,使用mp_grid_create 创建相同宽度和高度的 MP 网格,并将其 ID 存储在变量 mpg_level 中。最后,使用 ds_grid_to_mp_grid 使用 DS 网格的内容初始化 MP 网格。