pyxen.storage

プレイセッション間でデータを永続化します。ハイスコア、設定、進行状況など、ゲームを閉じて再度開いても残しておきたい値を保存できます。

storage.save("high_score", 9500)
storage.save("player_name", "Alice")
storage.save("sound_on", True)

score = storage.load("high_score")   # 9500
name = storage.load("player_name")   # "Alice"
missing = storage.load("no_key")     # None

値は intfloatstringbool として保存されます。その他の型(リスト、辞書、オブジェクト)はサポートされていません。


仕組み

iPad & Mac では、ストレージは .pyxen プロジェクトファイル内の storage.json として保存されます。データはプロジェクトと一緒に移動します。ファイルを共有すると、保存データも一緒に渡されます。

Webプレイヤー では、ストレージはブラウザの localStorage を使用し、ゲームごとにキーが分かれています。

ストレージはゲーム停止時に書き込まれます。手動でフラッシュする必要はありません。


メソッド

メソッド戻り値説明
save(key, value)None指定したキーで値を保存する
load(key)値または None値を読み込む。キーが存在しない場合は None を返す
has(key)boolキーが存在するかどうかを確認する
delete(key)Noneキーを削除する
clear()Noneすべてのキーを削除する

save(key, value)

storage.save("score", 100)
storage.save("name", "Alice")
storage.save("ratio", 3.14)
storage.save("completed", True)

指定した文字列キーで値を保存します。キーが既に存在する場合、値は上書きされます。

サポートされている型:

intstorage.save("score", 100)
floatstorage.save("speed", 2.5)
strstorage.save("name", "Alice")
boolstorage.save("muted", False)

その他の型(リスト、辞書など)を渡すと TypeError が発生します。


load(key)

score = storage.load("high_score")

キーに関連付けられた値を返します。キーが存在しない場合は None を返します。

返される値は保存時と同じ型を保持します。intはintとして、文字列は文字列として返されます。

score = storage.load("high_score")
if score is None:
    score = 0  # 初めてのプレイ

has(key)

if storage.has("high_score"):
    log("Welcome back!")

キーが存在する場合は True を、そうでない場合は False を返します。


delete(key)

storage.delete("old_setting")

ストレージからキーを削除します。キーが存在しない場合は何もしません。


clear()

storage.clear()

ストレージからすべてのキーを削除します。使用には注意してください。


使用例

ハイスコア

from pyxen import *

best = storage.load("best") or 0
score = 0

def update():
    global score, best
    score += 1
    if score > best:
        best = score
        storage.save("best", best)

設定

from pyxen import *

sound_on = storage.load("sound") is not False

def update():
    global sound_on
    if input.keyboard.m.pressed:
        sound_on = not sound_on
        storage.save("sound", sound_on)

レベル進行

from pyxen import *

level = storage.load("level") or 1

def next_level():
    global level
    level += 1
    storage.save("level", level)