在问我的问题之前,我会解释一下......我创建了许多从主菜单加载和卸载的游戏。
玩家在玩任何游戏之前在主菜单上输入他们的名字,当玩家完成游戏时,我想节省他们的时间(完成游戏的时间)并将这次卸载回主菜单。
有没有办法节省使用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")
}
你可以使用 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 和变量名称来检索它。
对于少量数据,最好使用SharedObjects使用automaticoo的解决方案。 它们需要最少的时间来设置,并且是存储少量数据的有效方法。
但是,如果它不适合您,您可以随时加载/保存到文本文件。您可以使用 ByteArrays 和 FileReferences 来执行此操作。
由于您提出了保存到word文件,因此我建议保存到文本文件将是实现目标的最佳方式(尽管除了您的word文档建议之外,我不确定..您的目标有点不清楚)
这是保存到文本文件的一个非常快速的演示。如果您也需要帮助加载它,请告诉我。
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(但向上一行)
要加载,您只需按行拆分数据,即可生成一个充满字符串和整数/数字的数组(但您的分数可能起作用)。同样,如果您需要帮助,请告诉我。
我不确定这是否是实现你所追求的目标的最有效方法,因为你的目标对我来说并不完全清楚,但它对我自己来说是一种非常有用的存储大量数据的方式,我猜如果你想把所有的分数都加在一起。
编辑:
好的,对于您在下面提出的问题:
- 保存多个用户的分数很简单。只需有一个数组,该数组从文本文件加载数据(如果文本文件存在),然后将新分数添加到数组的末尾,然后保存回文本文件。
下面是一个示例:
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/);
}
这会将所有现有数据加载到数组中。从那以后你做什么取决于你。