处理外部信息(xml,html,js,shareObject)
Accessing External Data
有时候访问游戏的外部信息是非常必要的, 你可以载入来自网页或者文本域的外部参数,也可以保存或者下载本地信息,
External Variables
假设你有一个游戏是根据一些选项而变化的
你可以从flash影片所在的html页面获取一些参数, 有几种不同的方法能实现这个,但是如果你使用通过publish setting设置而发布生成的html模版的话,你能通过设定AC_FL_RunContent 函数中的参数flashvars 开实现传递。
看这个比较短的函数, 这里包含我添加的参数flashvars
<script language=”javascript”>
AC_FL_RunContent(
‘codebase’,
‘http://download.macromedia.com/p ... flash.cab#version=9,0,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.”;
有时候访问游戏的外部信息是非常必要的, 你可以载入来自网页或者文本域的外部参数,也可以保存或者下载本地信息,
External Variables
假设你有一个游戏是根据一些选项而变化的
你可以从flash影片所在的html页面获取一些参数, 有几种不同的方法能实现这个,但是如果你使用通过publish setting设置而发布生成的html模版的话,你能通过设定AC_FL_RunContent 函数中的参数flashvars 开实现传递。
看这个比较短的函数, 这里包含我添加的参数flashvars
<script language=”javascript”>
AC_FL_RunContent(
‘codebase’,
‘http://download.macromedia.com/p ... flash.cab#version=9,0,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.”;