You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AS3使用[]运算符访问SharedObject嵌套属性失效问题

核心原因

方括号运算符仅支持识别单层级属性名,不会自动解析字符串中的点号做多级属性跳转。当你传入"userData.data.Game1Score"这类带点的完整路径字符串时,运行时会直接查找当前对象下名称完全等于这整串字符的属性,自然无法匹配到你要的多级嵌套属性。
顺带提一句,你初始的变量定义代码里有笔误,给data2赋值时错误指向了Game1Score,实际开发时注意对应关卡编号,避免分数串档。

实现方案

你现在的中转变量+重复赋值的写法扩展性太差,关卡越多冗余代码越多,可以根据需求选下面两种写法:

方案1:通用多级路径存取方法

如果后续还会有多层嵌套的属性需要动态访问,可以写两个通用方法,自动拆分点分隔的路径逐层寻址:

// 按路径给嵌套属性赋值
function setPropByPath(root:Object, path:String, val:*):void {
    const segments:Array = path.split(".");
    let cursor:Object = root;
    // 先遍历到目标属性的父级节点
    for (let i:int = 0; i < segments.length - 1; i++) {
        cursor = cursor[segments[i]];
        if (cursor == null) return; // 中间节点不存在直接终止,避免抛错
    }
    // 给最终节点赋值
    cursor[segments[segments.length - 1]] = val;
}

// 按路径读取嵌套属性值
function getPropByPath(root:Object, path:String):* {
    const segments:Array = path.split(".");
    let cursor:Object = root;
    for (let i:int = 0; i < segments.length; i++) {
        cursor = cursor[segments[i]];
        if (cursor == null) return undefined;
    }
    return cursor;
}

使用时不需要再定义data1、data2这类全局中转变量,也不需要在更新函数里挨个给GameXScore赋值:

var currentScorePath:String;

// 游戏入口按钮直接绑定对应分数的存储路径
function BtnGame1(event:MouseEvent):void {
    currentScorePath = "Game1Score";
}
function BtnGame2(event:MouseEvent):void {
    currentScorePath = "Game2Score";
}

// 结算页存分逻辑
function NextoPageLevel(event:MouseEvent):void {
    setPropByPath(userData.data, currentScorePath, 3); // 示例分数3
    userData.flush();
}

注意:SharedObject修改属性后必须调用flush()方法才会把数据持久化到本地,否则可能在游戏意外退出时丢失分数数据。

方案2:计分场景极简写法

如果所有关卡分数都直接存在userData.data下,没有多层嵌套,连路径解析方法都不需要写,直接用关卡标识作为属性名动态访问即可:

var currentGameKey:String;

function BtnGame1(event:MouseEvent):void {
    currentGameKey = "Game1Score";
}
function BtnGame2(event:MouseEvent):void {
    currentGameKey = "Game2Score";
}

function NextoPageLevel(event:MouseEvent):void {
    userData.data[currentGameKey] = 3;
    userData.flush();
}

后续加新关卡只需要加对应的按钮绑定新的GameXScore字符串就行,完全不用改存分、更新存档的公共逻辑,没有冗余代码。

内容的提问来源于stack exchange,提问作者Ahlan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:42:52