Accessing External Data

有时候访问游戏的外部信息是非常必要的, 你可以载入来自网页或者文本域的外部参数,也可以保存或者下载本地信息,

External Variables

假设你有一个游戏是根据一些选项而变化的

你可以从flash影片所在的html页面获取一些参数, 有几种不同的方法能实现这个,但是如果你使用通过publish setting设置而发布生成的html模版的话,你能通过设定AC_FL_RunContent 函数中的参数flashvars 开实现传递。


看这个比较短的函数, 这里包含我添加的参数flashvars


<script language=”javascript”>

AC_FL_RunContent(

‘codebase’,

 ,0,0’,

‘width’, ‘550’,

‘height’, ‘400’,

‘src’, ‘ExternalVariables’,

‘quality’, ‘high’,

‘flashvars’, ‘puzzleFile=myfilename.jpg&difficultyLevel=7’

);

</script>


Flashvars是一对属性名等于值的格式, 他们之间用&分开,上面的参数我们设置了puzzleFile等于myfilename.jpg, diffcultyLevel等于7


Flash播放的时候,flash能通过LoaderInfo对象获取这些参数, 下面的这行代码是获得了参数并且把参数装载到一个对象里面


var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;


如想访问单个的参数值,你可以使用这样的代码实现


var diffLevel:String = paramObj[“difficultyLevel”];


你可以使用这个方法传递任何数字,例如图片的名字,开始的关卡,速度,位置等等


Loading Data

调用外部文本文件是容易的,我们可以调用xml格式的文件,那将是非常方便的

例如我们的xml是这样的


<LoadingData>

<question>

<text>This is a test</text>

<answers>

<answer type=”correct”>Correct answer</answer>

<answer type=”wrong”>Incorrect answer</answer>

</answers>

</question>

</LoadingData>


如果你想调用xml里面的数据,我们需要URLRequest 和 URLLoader 两个对象的帮忙,然后你可以监听载入xml文件是否完成,如果完成可以触发一个函数的实现!


var xmlURL:URLRequest = new URLRequest(“LoadingData.xml”);

var xmlLoader:URLLoader = new URLLoader(xmlURL);

xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);


我们可以写这个函数去读取xml里面的信息并trace出来

function xmlLoaded(event:Event) {

var dataXML = XML(event.target.data);

trace(dataXML.question.text);

trace(dataXML.question.answers.answer[0]);

trace(dataXML.question.answers.answer[0].@type);

}


我们需要把xml文件内容转换成XML对象,然后便可以轻松访问了


读黑羽舵主的殿堂之路看到xml可以直接写在flash里面,所以我们可以直接创建XML对象,只不过不是外部调用而已


Var dataXML: XML =


<LoadingData>

<question>

<text>This is a test</text>

<answers>

<answer type=”correct”>Correct answer</answer>

<answer type=”wrong”>Incorrect answer</answer>

</answers>

</question>

</LoadingData>


trace(dataXML.question.text);

trace(dataXML.question.answers.answer[0]);

trace(dataXML.question.answers.answer[0].@type);




Saving Local Data


游戏中我们通常要存储数据到本地,例如你可以存储游戏先前的分数,或者一些游戏选项,去存储数据到本地,我们需要 SharedObject 对象。

看下面代码, 访问SharedObject对象同时会在本地相应的目录生成 命名为 mygamedata的sol文件,这个文件就是用来存储本地数据的,设定myLocalData.data为gameinfo,会在 mygamedata文件里面生成gameinfo = “Store this”, 当我们第一次运行下面的代码的时候,是访问不到本地数据的,因为第一次下面代码完成了本地创建和存储的工作,但第2次运行的时候就会读出Store this了,也就是读取的是先前的数据。

var myLocalData:SharedObject = SharedObject.getLocal(“mygamedata”);

trace(“Found Data: “+myLocalData.data.gameinfo);

myLocalData.data.gameinfo = “Store this.”;