AS3/AIR 使用 SharedObject 保存/加载多个用户名
Posted
技术标签:
【中文标题】AS3/AIR 使用 SharedObject 保存/加载多个用户名【英文标题】:AS3/AIR Save/Load multiple usernames using SharedObject 【发布时间】:2017-06-08 17:14:48 【问题描述】:我正在尝试创建一个使用 Adobe 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 我有点失落,很抱歉我是新手。您能否提供两个或更多用户的示例代码?谢谢。
【参考方案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 坐标,使它们形成一列。以上是关于AS3/AIR 使用 SharedObject 保存/加载多个用户名的主要内容,如果未能解决你的问题,请参考以下文章
使用 WiFi Direct 或 Air/AS3 中的热点连接应用程序