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 上,存储以 storage.json 形式保存在 .pyxen 项目文件内部。数据随项目一起移动——如果你分享文件,保存的数据也会一起分享。

网页播放器上,存储使用浏览器的 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,string 返回 string。

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)