Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 ActionScript3(AS3)从SharedObject收集数据_Actionscript 3_Flash_Actionscript_Shared Objects_Local Shared Object - Fatal编程技术网

Actionscript 3 ActionScript3(AS3)从SharedObject收集数据

Actionscript 3 ActionScript3(AS3)从SharedObject收集数据,actionscript-3,flash,actionscript,shared-objects,local-shared-object,Actionscript 3,Flash,Actionscript,Shared Objects,Local Shared Object,首先,我应该先说我对Flash/AS很陌生 长话短说,我正在用Flash制作一个非常基本的问答游戏。用户将收到问题,无论他们选择的答案是正确的还是错误的,都必须选择答案才能继续 这将在我的工作中用作培训工具,我们需要能够跟踪用户的答案,以确定哪些人是对的/错的,哪些人需要额外的培训,等等 我最初的想法是利用SharedObjects来收集他们的答案,因为它们是特定于用户的,这似乎是有道理的。我的问题是,有没有办法访问SO数据并向经理发送电子邮件、导出文本文件或其他内容?是否可能将点击存储在数组中

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

长话短说,我正在用Flash制作一个非常基本的问答游戏。用户将收到问题,无论他们选择的答案是正确的还是错误的,都必须选择答案才能继续

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

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

另一件事是,我们不希望人们能够重新参加测验,因为90%以上的问题都是正确的。我的另一个想法是,当用户到达终端屏幕时,我可以将一些数据写入,并在登录时进行检查,以查看他们是否已经完成了游戏


不管怎样,这就是我遇到的问题。如果发送电子邮件/导出数据不是一个选项,那么还有什么其他选项?

首先,请注意使用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.GetLocalQuike;并在测验过程中添加数据

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

建议构建一个服务器端脚本,通过POST请求接收信息并通过电子邮件发送到您选择的地址。 不建议生成包含测验结果的mailto url作为电子邮件正文。问题在于,它允许用户在将结果发送给预期的收件人之前在自己的邮件客户端中编辑结果。
我还应该提到,这个游戏有多个场景,所以需要有一种方法来保存所有场景的数据。按照我现在的设置方式,阵列数据总是被从当前场景收集的数据覆盖。感谢您的全面回复。我知道场景不是首选方法,但这是我最熟悉的方法,而且项目的时间限制在某种程度上迫使我采取行动。感谢您指出这种方法在sharedobjects中的局限性……我知道它不是防弹的,但我有将近100%的信心,没有人知道他们的答案存储在任何地方,也没有人知道他们可以更改答案。谢谢你的邮件建议。常规的mailto解决方案肯定是个问题。我将在星期一尝试一下这个代码。再次感谢。