2012-04-08 108 views
0

在問我的問題之前,我會稍微解釋一下......我已經創建了無數個加載和卸載主菜單的遊戲。保存文本字段輸入

播放器進入他們的名字在主菜單上玩任何遊戲,當玩家完成一個遊戲,我想他們節省時間(拍攝完成遊戲)和卸載這個時候回到主菜單之前。

是否有使用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") 
} 
+4

你能澄清最後一句話嗎?因爲通過php發送分數聽起來像是「在互聯網上工作」。 – joncys 2012-04-08 15:25:17

回答

0

對於少量的數據,你是最好的關閉只是通過使用共享對象與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. 要保存多個用戶的得分非常簡單。只需要一個單獨的數組來加載文本文件中的數據(如果文本文件存在),然後將新分數添加到數組的末尾,然後保存迴文本文件。

下面是一個例子:

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

這將所有現有數據加載到陣列。你從那時起做什麼取決於你。

+0

嘿謝謝你的回覆。 這段代碼可以節省玩家在遊戲結束時的時間,並且在完成遊戲卸載並重新加載主菜單後需要加載。 我現在有幾個問題: 代碼要求用戶保存,這可以自動完成嗎? 如果我想在同一個txt文件中保存多個用戶時間,我該怎麼做? 最後,我將如何去在主菜單中加載這個? 感謝您的幫助。 – Ant 2012-04-09 10:58:50

+0

不用擔心好友。不幸的是,(但也是幸運的),保存到文件不能在沒有詢問用戶的情況下完成,因爲這存在安全風險。這不是我們能夠實現的。至於你的其他問題,我會用一些答案編輯我的答案。 :) – hazdog 2012-04-09 13:07:46

+0

嘿已編輯我的問題在頁面的頂部顯示我有什麼樣的代碼。出於某種原因,它不會出現和錯誤或不存儲它?對不起,這是我失去了一些東西的問題。 – Ant 2012-04-09 15:27:48