【问题标题】:AS3/AIR Save/Load multiple usernames using SharedObjectAS3/AIR 使用 SharedObject 保存/加载多个用户名
【发布时间】:2017-06-08 17:14:48
【问题描述】:

我正在尝试创建一个使用 Adob​​e Flash Actionscript 3 创建的 Android 应用程序。我希望该应用程序的每个用户在应用程序的开头输入他们的姓名,然后他们就可以在当前帧中保存他们的进度(并且它将被保存到保存槽或类似位置)。但是,当另一个用户要使用该应用程序时,问题就出现了,他/她必须输入一个不同的用户名,并且他/她可以随时保存(并加载他/她的不同加载进度,与以前的用户不同。)。它还在继续。

我是编程新手,希望你能帮助我。任何建议将不胜感激。谢谢!

这是我创建用户名并保存的代码:

function handleClick(Event:MouseEvent):void
{
    var myFirstVariable = boxOne.text;
    boxTwo.text = myFirstVariable;
    gotoAndStop("opening_scene")
}
myButton2.addEventListener(MouseEvent.MOUSE_UP, handleClick);

更新的编辑 2:这是我的保存和加载代码。还是不行:

var so:SharedObject = SharedObject.getLocal("Test");
var userName:String = nameField.text;

if (so.data.users == null)
    so.data.users = new Object();

btnSave.addEventListener(MouseEvent.CLICK, onClick);
function onClick(e:MouseEvent):void
{
    if (so.data.users[userName] == null)
    so.data.users[userName] = new Object();
    so.data.users[userName].lastframe = currentFrame;
    so.flush();
    trace(userName);
}

btnLoad.addEventListener(MouseEvent.CLICK, reloadBtnClick);
function reloadBtnClick(e:MouseEvent):void
{
    if (so.data.users[userName] == null)return;
    if (so.data.users[userName].lastFrame == null) return;
    gotoAndStop(so.data.users[userName].lastFrame);
    trace(userName);
}

【问题讨论】:

  • 好吧,如果你不能做数据库,你需要把用户名和他们的框架一起塞进保存文件。这意味着您需要在 mySharedObject.data 上再添加一层对象,这取决于用户。
  • @Vesper 你能给我一个示例代码吗?谢谢
  • mySharedObject.data.users[i].currentframe,其中i 应取决于用户并在加载时存储在某处。
  • @Vesper 我有点失落,很抱歉我是新手。您能否提供两个或更多用户的示例代码?谢谢。

标签: android actionscript-3 flash air save


【解决方案1】:

我建议你使用 SQLite 数据库来保存你的数据可以在这里找到所有的文档Manipulating SQL database data 嗯有点复杂,但工作起来就像在 Excel 中拥有表格一样。

【讨论】:

  • 你应该尝试并且会在未来的项目中做得更好。
【解决方案2】:

正如 Vesper 所建议的,您需要拥有一个存储所有用户的存储空间。例如:

// Put user name here.
var userName:String;

var SO:SharedObject = SharedObject.getLocal("save");

// Create storage for users.
if (SO.data.users == null) SO.data.users = new Object();

// ...

function saveCurrentFrame(event:MouseEvent):void
{
    // Create storage for current user by their name.
    if (SO.data.users[userName] == null) SO.data.users[userName] = new Object();

    SO.data.users[userName].lastframe = currentFrame;
    SO.flush();
}

function getLastFrame(event:MouseEvent):void
{
    trace(1);
    // Skip this if there's no record for 
    if (SO.data.users[userName] == null) return;
    trace(2);
    if (SO.data.users[userName].lastFrame == null) return;
    trace(3);

    gotoAndStop(SO.data.users[userName].lastFrame);
    trace(4);
}

【讨论】:

  • 谢谢!虽然我还有一些问题,但我已经到了那里。首先,在您的代码中,我可以在哪里插入可以插入用户名输入 txtbox 的实例名称(例如 boxOne)的部分?其次,是否有可能有一个“相同”的用户名,还是会出错?最后,是否可以有一个“已保存插槽”列表,其中包含保存时的用户名和时间戳?再次,非常感谢!
  • 您可以用您的 boxOne.text 替换 userName(如果它在任何地方都可用),或者将其文本保存到变量中。相同的用户名是相同的,将被视为一个用户。是的,您可以使用 > for (aName:String in SO.data.users) 读取所有保存的名称
  • 会不会像这样 var userName:String = boxOne.text?
  • 是否可以将保存的名称视为按钮?是否有可能让它看起来像带有保存名称的滚动框,可以随时加载?
  • 当然。创建一个代表一个用户的视觉对象(MovieClip/Sprite),就像一个带有用户名的按钮。让它在其构造函数中接受用户名。然后使用我上面给你的循环为每个保存的用户创建这些按钮。改变它们的 Y 坐标,使它们形成一列。
猜你喜欢
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2011-12-26
  • 2012-03-09
相关资源
最近更新 更多