0

首先,我应该先说我对 Flash/AS 很陌生!

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

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

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

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

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

4

1 回答 1

0

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

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

最后,您提到您正在使用场景。大多数开发人员会建议不要这样做。这是开发 Flash 应用程序的过时模式。如果您现在正处于开发过程中的某个阶段,您可以将它们去掉,我强烈建议您这样做。

除了注意事项,您可以这样做:

// 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 url。这样做的问题是它允许用户在将结果发送给预期的收件人之前在他们自己的邮件客户端中编辑结果。
于 2013-12-13T21:40:06.177 回答