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
値は int、float、string、bool として保存されます。その他の型(リスト、辞書、オブジェクト)はサポートされていません。
仕組み
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)
指定した文字列キーで値を保存します。キーが既に存在する場合、値は上書きされます。
サポートされている型:
| 型 | 例 |
|---|---|
int | storage.save("score", 100) |
float | storage.save("speed", 2.5) |
str | storage.save("name", "Alice") |
bool | storage.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)