目前市面上已经有很多游戏采用了把图片缓存到玩家客户端的做法,这种方法有利有弊,因为并不是所有的玩家都希望自己的电脑的某个角落被放入过多的缓存文件,久而久之造成电脑性能下降;但是总的来说这种技术还是好的:第一,webgame的总体资源也是有限的,不会有太大的容量占用,而且对于程序来说一般只缓存一些核心资源,比如使用很频繁的资源以及需要下载较长时间的大背景大图片或者容量稍大的swf文件等;第二,可以大幅度提升玩家第二次进入游戏的速度,某种意义上可以提升游戏体验度;
好了,废话少说,下面直接说说怎么使用SharedObject来做到把图片或者swf文件缓存到客户端,并在第二次进入程序的时候直接使用缓存的数据还原成想要的原始图片或者swf文件;主要思想是:通过URLStream把显示对象加载进来获得其ByteArra的原始数据,然后通过shareObject把二进制保存到客户端的本地,那么下次进入程序的时候直接可以通过ShareObject获得上次保存的二进制数据,有了二进制数据,只需要通过Loader.loadByte()函数就可以把二进制数据转换成DisplayObject对象;
1.首先我们使用SharedObject来写一个Cookie类:Cookie.as的代码如下:
// WEBGAME Confidential
// Copyright 2011. All rights reserved.
//
// Cookie.as
// Summary // TODO Auto-generated summary stub
// Version 1.0
// Author txiejun
// Created Nov 4, 2011 10:46:36 PM
package aurora.store
{
import flash.events.NetStatusEvent;
import flash.net.SharedObject;
import flash.net.SharedObjectFlushStatus;
import flash.utils.getQualifiedClassName;
/**
*
* @author txiejun
* @contact txiejun@126.com
* @created Nov 4, 2011 10:46:36 PM
*/
public class Cookie
{
private var _name:String = null;
private var _path:String = null;
private var _shdobj:SharedObject;
private var flushStatus:String = null;
/**
* minDiskSpace KB 空间的存储量 小于 minDiskSpace的数量将不会有提示框弹出
*/
public var minDiskSpace:int = 0;
public function Cookie(name:String,path:String=null,minDiskSpace:int=0)
{
_name = name;
_path = path;
this.minDiskSpace = minDiskSpace;
_shdobj = SharedObject.getLocal(name,_path);
}
private function onFlushStatus(event:NetStatusEvent):void
{
switch (event.info.code)
{
case "SharedObject.Flush.Failed":
trace(getQualifiedClassName(this)+".onFlushStatus() Error: Failed write SharedObject to disk."