egret白鷺引擎保存加載文件到本地的實(shí)現(xiàn)方案
?最近幾天我在做游戲場(chǎng)景編輯器開(kāi)發(fā),所以有一些繪畫(huà)內(nèi)容編輯的內(nèi)容需要存儲(chǔ)文件到硬盤(pán)中,最好是用戶可以進(jìn)行保存自己編輯的項(xiàng)目到硬盤(pán)然后隨時(shí)打開(kāi)項(xiàng)目文件,就想flash的fla文件一樣,可以存儲(chǔ)到u盤(pán)在u盤(pán)打開(kāi)編輯.....

盜用flash pro編輯器的圖,就是希望這種效果哦
不過(guò)很不幸,大多數(shù)前端編程對(duì)于文件操作都是禁止的,因?yàn)榍岸丝梢圆僮饔脩粝到y(tǒng)中的文件太危險(xiǎn)了,很容易就讓用戶受到威脅,比如打開(kāi)一個(gè)網(wǎng)址這個(gè)網(wǎng)址的作者就通過(guò)瀏覽器入侵用戶電腦了,這是非常危險(xiǎn)的,所以基本上網(wǎng)上找不到非常好的解決方案
除了flash提供了一個(gè)打開(kāi)文件和保存文件的net包下的功能外,html5,JavaScript中并沒(méi)有提供任何功能。所以egret引擎也并沒(méi)有這樣的一個(gè)功能。而ax控件,html的from file都是建立在html上的,在游戲開(kāi)發(fā)應(yīng)用這種并不能接連起來(lái),native系統(tǒng)對(duì)原生web也是不支持的。
所以在這里就要用到服務(wù)端環(huán)境結(jié)合來(lái)實(shí)現(xiàn)了,我來(lái)說(shuō)一下這個(gè)地方的實(shí)現(xiàn)方案

首先用戶編輯場(chǎng)景項(xiàng)目,并且連接到了我的服務(wù)器里面,服務(wù)器接收到內(nèi)容可能有兩種情況一種是純粹的json數(shù)據(jù),這是用戶畫(huà)的每一筆畫(huà)的內(nèi)容,這種比較容易操作,直接寫(xiě)文件utf8編碼到文件就可以,也可以直接存mongodb數(shù)據(jù)庫(kù),而另一種用戶傳來(lái)base64編碼內(nèi)容,這個(gè)就是用戶的圖片texture了,然后texture紋理轉(zhuǎn)換為base64編碼數(shù)據(jù)傳到服務(wù)端來(lái),服務(wù)端解碼base64,然后再進(jìn)行存入文件或者數(shù)據(jù)庫(kù),當(dāng)然這里存數(shù)據(jù)庫(kù)開(kāi)銷(xiāo)太大。

?不管這里是會(huì)用nodeJS還是用php都可以實(shí)現(xiàn)。然后返回給用戶下載地址。在此之前服務(wù)端已經(jīng)生成好文件放到服務(wù)器了,然后用戶就可以直接下載文件到本地。

?
文件也可以在云端存儲(chǔ)著,玩家可以看到自己的項(xiàng)目文件列表內(nèi)容,這樣對(duì)用戶可能更方便一些連硬盤(pán)都不用了直接往我服務(wù)器掛,就是服務(wù)器費(fèi)有點(diǎn)心痛。
