1

在问我的问题之前,我会稍微解释一下……我已经创建了许多可以从主菜单加载和卸载的游戏。

玩家在玩任何游戏之前在主菜单上输入他们的名字,当玩家完成游戏时,我想节省他们的时间(完成游戏所花费的时间)并将这段时间卸载回主菜单。

有什么方法可以将使用 AS3 的时间保存到 word 文档或类似的东西中?我无法使用 php 将时间发送到我的网站,因为这些游戏将在比赛中使用,并且都需要与 Internet 配合使用。

有什么想法吗?

编辑:

    var dataloader:URLLoader = new URLLoader();
    var dataarray:Array = new Array(); // do this where you intialise other vars

    function preparesave() 
    {
        dataloader.load(new URLRequest("savedata.txt"));
    }

    dataloader.addEventListener(Event.COMPLETE,savedata);

    function savedata (event:Event) 
{
    dataarray = event.target.data.split(/\n/);
    dataarray.push(MyTimer);

    var bytes:ByteArray = new ByteArray();
    var fileRef:FileReference = new FileReference();

    for (var i = 0; i < dataarray.length;i++) 
    {
        bytes.writeMultiByte(dataarray[i] + "\n", "iso-8859-1");
        bytes.writeMultiByte('English Game Time: ',"iso-8859-1");
        bytes.writeMultiByte(HourText.text.toString(),"iso-8859-1");
        bytes.writeMultiByte(':',"iso-8859-1");
        bytes.writeMultiByte(MinuteText.text.toString(),"iso-8859-1");
        bytes.writeMultiByte(':',"iso-8859-1");
        bytes.writeMultiByte(SecondText.text.toString(),"iso-8859-1");
    }

    fileRef.save(bytes,"savedata.txt")
}
4

2 回答 2

2

您可以为此目的使用 cookie(sharedObject)。请参阅http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/SharedObject.html

var data:SharedObject = SharedObject.getLocal("userdata");
    data.startTime = new Date().time;

如果您再次需要 startTime,您可以通过 cookie 和变量名检索它。

于 2012-04-08T22:28:22.120 回答
1

对于少量数据,您最好通过使用 SharedObjects 来使用 automaticoo 的解决方案。它们需要最少的时间来设置,并且是存储少量数据的有效方式。

但是,如果它不适合您,您可以随时加载/保存到文本文件。您可以使用 ByteArrays 和 FileReferences 来做到这一点。

由于您提出了保存到 word 文件,我建议保存到文本文件将是实现目标的最佳方式(尽管除了您的 word doc. 建议之外,我不确定..您的目标有点不清楚)

这是保存到文本文件的非常快速的演示。如果您也需要帮助加载它,请告诉我。

function savedata() {
var bytes:ByteArray = new ByteArray();
var fileRef:FileReference = new FileReference();
bytes.writeMultiByte(playername + "\n", "iso-8859-1");
bytes.writeMultiByte(playerscore.toString(),"iso-8859-1");
fileRef.save(bytes,"savedata.txt");
}

这很简单。通过使用 writeMultiByte,我们可以在保存文本文件之前根据需要写入尽可能多的数据!如果您有需要保存的数据数组,这将特别有用。

无论如何,“iso-8859-1”只是对正在使用的字符集/文件格式的引用。我不确定你是否可以简单地写 utf-16 等。我一直只是使用就像上面写的那样。

此处文本文件中的结果如下:

彼得

9547(但上升一行)

要加载,您可以按行拆分数据,从而生成一个包含字符串和整数/数字的数组(但是您的分数可能会起作用)。再次,让我知道您是否需要帮助。

我不确定这是否是实现您所追求的最有效的方法,因为您的目标对我来说并不完全清楚,但它对我自己来说是一种非常有用的方式来存储大量数据,我'如果您将所有玩家的分数相加,我猜您想要这样做。

编辑:

好的,对于您在下面提出的问题:

  1. 保存多个用户的分数很简单。只需有一个数组从文本文件加载数据(如果文本文件存在),然后将新分数添加到数组的末尾,然后保存回文本文件。

这是一个例子:

var dataloader:URLLoader = new URLLoader();
var dataarray:Array = new Array(); // do this where you intialise other vars

function preparesave() {
    dataloader.load(new URLRequest("savedata.txt"));
}

dataloader.addEventListener(Event.COMPLETE,savedata);
function savedata (event:Event) {
    dataarray = event.target.data.split(/\n/);
    dataarray.push(playername);
    dataarray.push(playerscore);
    var bytes:ByteArray = new ByteArray();
    var fileRef:FileReference = new FileReference();
    for (var i = 0; i < dataarray.length;i++) {
        bytes.writeMultiByte(dataarray[i] + "\n", "iso-8859-1");
    }
    fileRef.save(bytes,"savedata.txt")
}

这样做是获取任何现有的保存数据,将其推送到数组(保存文件中的一行是一个数组数据条目),添加适当的数据,然后将其推送回保存文件。

(2) 要在主菜单中加载它,只需将此代码放在主菜单的框架中。

dataloader.load(new URLRequest("savedata.txt"));
dataloader.addEventListener(Event.COMPLETE,loaddata);
function loaddata (event:Event) {
    dataarray = event.target.data.split(/\n/);
}

这会将所有现有数据加载到数组中。从那时起你做什么取决于你。

于 2012-04-09T03:34:02.723 回答