この問題を考え直さないと最良の結果が得られると思うので、単純なキー値保存システムを他の保存データと共に保存するゲームに実装し、前の状態にアクセスする必要があるときにオンデマンドでロードするだけです。
フローは次のようになります。
- ファイルからの負荷レベル
- タイル/オブジェクトを配置する前に、「永続的」プロパティがあるかどうかを確認します。
- はいの場合:プロパティに一致するキーの保存されたキーと値のペアを確認し、適切な値を取得します。
- いいえの場合:通常どおりにオブジェクトを配置します
- プレーヤーがレベルを終了すると、「永続的な」プロパティを持つすべてのオブジェクトを介してゲームループが保存され、キーと値のペアとして保存されます。
以下は、単純な2Dゲームに使用するものに基づいた擬似コードの例です。
def load_map(map):
for y in range(0, height):
for x in range(0, width):
tile = map[x, y]
for property in tile.properties:
if is_persistent(property.name):
// Name prefixed with "persistent" means that it's persistent
// so we load the value from out persistent storage
property.value = persistent_values[property.name]
def save_map(map):
... everything in load_map ...
if (property.name.matches("persistent_*")):
// Name prefixed with "persistent" means that it's persistent
// so we save the value to persistent storage
persistent_values[property.name] = property.value
def is_persistent(name):
return name.matches("persistent_*") and persistent_values.contains(name)
次に、このプロパティを使用して状態を確認するだけです。
def draw():
if properties["persistent_is_pressed"].value:
draw_sprite(button_pressed)
else:
draw_sprite(button_unpressed)
def on_pressed():
properties["persistent_is_pressed"].value = not properties["persistent_is_pressed"].value
Tiledのようなタイルマップエディターを使用している場合、次のようなプロパティの追加は非常に簡単です。
願わくば、これが永続状態を可能な限り簡単に実装する方法についてのアイデアを与えてくれることを願っています!