tilemap_set_mask

此函数为单个图块地图设置 图块地图位掩码

您提供图块地图元素 ID(在使用 layer_tilemap_create 创建图块地图元素或使用函数 layer_tilemap_get_id 时获得),然后提供掩码值。例如,如果您有一个非常小的 16 x 16 个图块集,那么您的图块集中总共有 256 个不同的图块。您只需要 的 8 位即可为这些图块建立索引 (来自可用的 19 位数据)。这些位可以被 " 屏蔽",然后瓦片数据的其余部分可以用于存储附加值。请参阅 计算掩码位

图块地图位掩码是一项高级功能,允许您将图块数据 "blob" 的位供您自己使用。例如,您可以在图块数据中保留一些表示 " 实体 " 的位,然后可以检查快速碰撞。基本上,当 绘制 图块地图时,位掩码会针对图块数据进行 " 与 " 运算 (因此不会影响任何其他功能),这意味着不在掩码中的位被忽略,但用户仍可以出于自己的目的进行读取和写入。

 

语法:

tilemap_set_mask(tilemap_element_id, mask);

参数类型描述
tilemap_element_idTile Map Element ID要设置掩码的图块贴图元素的唯一ID值
maskReal掩码值

 

返回:

N/A

 

Example 1: Using 8 bits for the tile index

var _lay_id = layer_get_id("Tiles_sky");
var _map_id = layer_tilemap_get_id(_lay_id);
var _mask = tile_mirror | tile_flip | tile_rotate | 255;
tilemap_set_mask(_map_id, _mask);

上述代码从给定图层获取图块地图 ID,然后将图块地图位掩码设置为 8 位 (值为 2550b11111111),保留每个图块的翻转、镜像和旋转值平铺在地图上。

 

Example 2: Resetting to the default mask

var _lay_id = layer_get_id("Tiles_sky");
var _map_id = layer_tilemap_get_id(_lay_id);
var _mask = tile_mirror | tile_flip | tile_rotate | tile_index_mask;
tilemap_set_mask(_map_id, _mask);

上面的代码通过使用按位或组合所有图块掩码常量,将图块位掩码设置为 GameMaker 正确绘制图块所需的值。完整的 19 位用于图块索引,并保留镜像、翻转和旋转位。

 

Example 3: Writing and reading back custom data

Create Event

randomise();

var _lay_id = layer_get_id("Tiles_1");
var _map_id = layer_tilemap_get_id(_lay_id);
var _mask = tile_mirror | tile_flip | tile_rotate | 255;
tilemap_set_mask(_map_id, _mask);
for(var _x = 0;_x < tilemap_get_width(_map_id);_x++)
{
    for(var _y = 0;_y < tilemap_get_height(_map_id);_y++)
    {
        var _tdata = tilemap_get(_map_id, _x, _y);
        var _random_value = irandom(255);
        var _random_value_shifted = _random_value << 8;
        _tdata |= _random_value_shifted;
        tilemap_set(_map_id, _tdata, _x, _y);
    }
}

Step Event

var _tdata = tilemap_get_at_pixel(map_id, mouse_x, mouse_y);
random_value_under_cursor = (_tdata >> 8) & 255;

Draw GUI Event

draw_text(5, 5, $"Value: {random_value_under_cursor}");

上面的代码显示了如何在图块地图的单元格中存储一些自定义数据并读取它们。

在创建事件中,位掩码设置为 8 个最低位加上镜像、翻转和旋转位。然后将 0 到 255 之间的随机整数值写入每个图块的位 8 到 15。具体操作如下:_random_value 的位首先 移位 8 位,例如,值 0b0000000011001111(207) 变为 0b1111111100000000(52992)。此结果存储在 _random_value_shifted 中。然后,该值与图块数据进行按位 " 或 " 运算 |,只要在图块数据或随机值中设置了一位,就会得到 1 位。然后,使用 tilemap_set 将图块数据写回同一图块地图调用。

在 Step 事件中,使用 tilemap_get_at_pixel 查找鼠标下方的图块数据。为了取回随机值,首先将这些位 右移 8 位,这会将随机值的 8 位移回位位置 0 到 7( 索引位也会右移,因此会丢失) 在此刻)。然后,这个新值按位 " 与 "-ed& 为 255,以仅保留保存随机值的低 8 位 (可以设置任何镜像、翻转或旋转位,无需 " 与" -ing 会给出更高的值)。结果分配给 random_value_under_cursor

鼠标位置下的图块中存储的随机值显示在 Draw GUI 事件中。