2016-04-20 8 views
1

Ich versuche ein Beleuchtungssystem in Game Maker zu erstellen und das System zu strukturieren, das alle Lichter in einer ds_map enthalten soll. Ich möchte, dass ds_map in einem zweiten ds_map gehalten werden, dass alle Lichter in dem System enthältZerstört eine ds_map Sub-Maps?

lights { 
"l-01": {"x":20, "y":40, "radius":15}, 
... 
} 

Die Frage, die ich habe betrachtet das System Reinigung: Muss ich durch die Karte zu durchlaufen alle die Zerstörung Sub-Maps und dann die Karte zerstören, wird Game Maker automatisch die Sub-Maps zerstören, wenn die Light Map zerstört wird?

ds_map_destroy(lights); // do the sub maps ("l-01") also get destroyed? 

oder muss ich es so zu tun haben:

var k = ds_map_find_first(lights); 
repeat(ds_map_size(lights)){ 
    ds_map_destroy(lights[? k]); 
    k = ds_map_find_next(lights, k); 
} 

zusammen mit der ersten Frage Nach, wenn ich die Unter Karte

ds_map_delete(lights, "l-01") // will this destroy the map indexed under "l-01" 
wird ein Schlüssel Game Maker zerstören löschen

Sie können fragen: "Warum verwenden Sie eine ds_map, um eine Reihe von ds_maps zu halten, warum nicht einfach eine Liste von Karten erstellen?

Die Antwort kommt von der zweiten Frage. Wenn ich die Karten in einer Liste halte und eine der Karten löschen muss, ändert sich die Größe der Liste beim Entfernen der Karte und daher werden alle anderen indexierten Werte ausgeglichen. Der zweite Grund ist, dass ds_maps im Game Maker viel schneller sind als ds_lists

Ich hoffe, ich habe meine Frage klar gemacht und dass einer von euch da draußen die Antwort hat.

Antwort

0

Wenn Sie die Datenstruktur als Liste/Karte (mit ds_list_mark_as_map() oder ds_list_mark_as_list) markiert haben, wird sie automatisch gelöscht. Ansonsten müssen Sie es selbst löschen.

Von Dokumentation über ds_list_mark_as_list():

Diese Funktion wird "Markierung" (oder "Flag") eine bestimmte Position innerhalb eines zuvor erstellten ds_list als anderen ds_list halten. Diese Funktionalität ist nur für die Verwendung bei der Kodierung von JSON-Strings (die Sie mit json_encode erstellen können) und den komplementären ds-Map-Funktionen vorgesehen.

HINWEIS: Sobald eine ds_list einen Wert enthält, der als eine andere Liste oder Karte gekennzeichnet ist, zerstört das Zerstören der Liste auch die markierten Listen und Karten. Dies bedeutet, dass Sie den Listeninhalt nicht manuell durchlaufen müssen und die markierten Datenstrukturen einzeln zerstören müssen, bevor Sie die "Eltern" -Liste zerstören.

Wenn Sie Zweifel haben, können Sie überprüfen, ist die Datenstruktur vorhanden ist oder nicht, unter Verwendung ds_exists()