在问我的问题之前,我会稍微解释一下......我创造了许多游戏,可以在主菜单上加载和卸载。
玩家在玩任何游戏之前在主菜单上输入他们的名字,当玩家完成游戏时我想节省他们的时间(用于完成游戏)并将这段时间卸回主菜单。
有没有办法使用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")
}
答案 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(但上一行)
要加载,您可以逐行拆分数据,从而产生一个充满字符串和整数/数字的数组(但您的分数可能有效)。再次,如果您需要帮助,请告诉我。
我不确定这是否是实现目标的最有效方法,因为我的目标并不完全清楚,但对于我自己存储大量数据来说,这是一种非常有用的方法,我猜你是想要做的,如果你正在复合所有的球员。
编辑:
好的,您提出的问题如下:
以下是一个例子:
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/);
}
这会将所有现有数据加载到数组中。从那时起你所做的就取决于你。