ActionScript 3(AS3)从SharedObject收集数据

时间:2013-12-13 20:02:36

标签: actionscript-3 flash actionscript shared-objects local-shared-object

首先,我应该先说明我对Flash / AS很新!

长话短说,我正在Flash中开展一个非常基本的问答游戏。将向用户提出问题,并且必须选择要继续的答案(无论他们选择正确还是错误的答案)。

这将在我的工作中用作培训工具,我们需要能够跟踪用户的答案,以确定人们的对与错,谁需要额外的培训等。

我最初的想法是利用SharedObjects来收集他们的答案(因为SO是用户特定的,这似乎有意义)。我的问题是,有没有办法访问SO数据并发送电子邮件,将文本文件(或其他内容)导出给管理员?可能将点击存储在一个数组中并导出?

另一件事是我们不希望人们能够重新参加测验(有动力获得90%以上的问题)。我的另一个想法是,一旦用户到达最终屏幕,我就可以将一些数据写入SO,并且可以在登录时检查(以查看他们是否已经完成游戏)。

无论如何,这就是我遇到的问题。如果不能选择通过电子邮件发送/导出SO数据,还有哪些其他选项?

1 个答案:

答案 0 :(得分:0)

首先,关于使用SharedObjects存储任何重要信息的说明 - 在您的情况下,存储测验是否已完成以防止重新学习:它不是万无一失的。任何用户都可以删除或更改他们的共享对象,并且您不再拥有该数据。

至于跟踪他们的答案并通过电子邮件发送,这是完全可行的。将它们存储在共享对象中是不必要的,除非您打算让用户在多个会话过程中进行测验(部分完成测验,并在以后返回测试)。在单个“会话”期间存储在共享对象中的任何内容都可以在应用程序运行时轻松存储在内存中。

最后,你提到你正在使用场景。大多数开发人员会建议反对。这是开发闪存应用程序的过时模式。如果您现在正处于开发过程中的某个阶段,那么我强烈建议您将其删除。

除了注意事项,以下是你将如何做到这一点:

// in your first Scene (here, labeled "Scene 1"), grab a reference to a SharedObject, I named mine "quiz"
var so:SharedObject = SharedObject.getLocal("quiz");

// set up any necessary data structure for the data you plan to store 
if(!so.data.results){
    so.data.results = {};
}

// you can check to see if data has already been written to the shared object, if so, you can use this to determine the flow of the quiz
if(so.data.results.scene1Results){
    trace("scene 1 already completed: ",so.data.results.scene1Results);
}
else{
    so.data.results.scene1Results = "some value";
    so.flush();
    trace("scene 1 data stored");
}

在其他场景中,您可以像以前一样获取对共享对象的引用:SharedObject.getLocal("quiz");并在测验进行时向其中添加数据。

至于邮寄结果,您有两种选择:

  1. (建议)构建一个服务器端脚本,通过POST请求接收信息并通过电子邮件发送到您选择的地址。
  2. (不推荐)生成一个mailto网址,其中包含测验结果作为电子邮件正文。这样做的问题在于,它允许用户在将结果发送给目标收件人之前在自己的邮件客户端中编辑结果。