保存文本字段输入

时间:2012-04-08 15:04:51

标签: actionscript-3 flash fla

在问我的问题之前,我会稍微解释一下......我创造了许多游戏,可以在主菜单上加载和卸载。

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

有没有办法使用AS3将时间保存到word文档或类似的东西?我无法通过php将时间发送到我的网站,因为游戏将在竞赛中使用,而且所有这些都需要与互联网协同工作。

任何想法的人?

编辑:

    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")
}

2 个答案:

答案 0 :(得分:1)

您可以为此purpuse使用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和变量名来检索它。

答案 1 :(得分:0)

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

但是,如果不适合您,您可以随时加载/保存到文本文件中。您可以使用ByteArrays和FileReferences执行此操作。

由于你提出保存到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. 要保存多个用户的分数很简单。只需要一个数组加载文本文件中的数据(如果文本文件存在),然后将新分数添加到数组的末尾,然后保存回文本文件。
  2. 以下是一个例子:

    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/);
    }
    

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