我正在尝试在Game Maker中制作一个照明系统,并构建我想要包含ds_map中所有灯光的系统。我希望ds_map保存在包含系统中所有灯光的第二个ds_map中
lights {
"l-01": {"x":20, "y":40, "radius":15},
...
}
我对清理系统的问题: 我是否必须遍历地图摧毁所有子地图然后摧毁地图,当光照地图被摧毁时,Game Maker会自动销毁子地图吗?
ds_map_destroy(lights); // do the sub maps ("l-01") also get destroyed?
或者我必须这样做:
var k = ds_map_find_first(lights);
repeat(ds_map_size(lights)){
ds_map_destroy(lights[? k]);
k = ds_map_find_next(lights, k);
}
继第一个问题之后,如果我删除一个键,游戏制作者会破坏子地图
ds_map_delete(lights, "l-01") // will this destroy the map indexed under "l-01"
您可能会问:“为什么使用ds_map来保存一堆ds_maps,为什么不创建一个地图列表?
答案来自第二个问题。如果我将列表保存在列表中,并且我需要删除其中一个映射,则列表将在删除映射时调整大小,从而抵消所有其他索引值 第二个原因是在Game Maker中,ds_maps比ds_lists快得多
我希望我的问题清楚,你们中的一个人有答案。
答案 0 :(得分:1)
如果您将添加的数据结构标记为列表/地图(使用ds_list_mark_as_map()
或ds_list_mark_as_list()
或ds_map_add_list()
或ds_map_add_map()
),则会自动将其删除。否则你需要自己删除它。
有关ds_list_mark_as_list()
的文档:
注意:一旦ds_list中有一个标记为另一个列表或地图的值,销毁列表也会破坏标记的列表和地图。这意味着在销毁" parent"之前,您不必手动浏览列表内容并单独销毁标记的数据结构。列表。
和ds_map_add_list()
:
如果ds_map以这种方式添加了列表,则销毁父映射也会破坏包含的列表并释放其内存。
如果您有疑问可以检查,是否存在数据结构,使用ds_exists()