xml - 将 Flash (AS3) 数据保存到 XML

标签 xml flash actionscript-3 export

我已经浏览了包括 Stack Overflow 在内的所有互联网几个小时,试图找到一个可靠的、可行的将 Flash 中的信息保存到 XML 文件中的示例。

我想获取两种不同类型对象的位置并将每个对象的列表导出到 XML。我们将调用对象ballbat

所以,我希望 XML 看起来像这样:

<objects>
    <ball xPos=34 yPos=43/>
    <ball xPos=12 yPos=94/>
    <bat xPos=1 yPos=39/>
</objects>

听起来很简单,但我还没有找到一个像样的例子来说明究竟是什么 AS3 代码可以做到这一点。数据位于 MovieClip 的两个向量中,因此我将使用 bats[i].x 和 bats[i].y 作为输入值。

如何创建此 XML 并将其保存在本地某处以供查看?感谢您提供的任何帮助,事实证明这非常令人沮丧。

最佳答案

在 AS3 中使用 XML 真的很容易,所以用一些代码扩展 TheDarkIn1978 的答案:

创建一个 XML 对象:

var objs:XML = new XML( <objects /> ); // create the <objects /> node

// for your objects
var ball1:XML = new XML ( <ball /> ); // create the <ball /> node
ball1.@xPos = 12; // add 12 as an attribute named "xPos"
ball1.@yPos = 42; // add 42 as an attribute named "yPos"
objs.appendChild( ball1 ); // add the <ball> node to <objects>

// an example of using variables in your xml
var name:String = "something";
var sx:XML = new XML( <{name} /> ); // creates a node <something />

将 TheDarkIn1978 用于 AS3 中的 XML 类以了解更多信息。

保存文件:

// saving out a file
var f:FileReference = new FileReference;
f.save( sx, "myXML.xml" ); // saves under the name myXML.xml, "sx" being your root XML node

在保存之前压缩您的 XML(对于大型 XML 文件,这可以节省很多):

// compressing before saving
var f:FileReference = new FileReference;

var bytes:ByteArray = new ByteArray;
bytes.writeUTFBytes( myXML ); // "myXML" being your root XML node
bytes.compress(); // compress it

f.save( bytes, "myXML.xml" );

加载压缩的 XML、解压缩并检索 XML 对象:

// uncompressing a compressed xml
var loader = new URLLoader;
loader.dataFormat = URLLoaderDataFormat.BINARY;

// listen for our events
loader.addEventListener( Event.COMPLETE, this._onLoad );
loader.addEventListener( IOErrorEvent.IO_ERROR, this._onFail ); // not shown
loader.addEventListener( SecurityErrorEvent.SECURITY_ERROR, this._onSecurityError ); // not shown

private function _onLoad( e:Event ):void
{
    var loader:URLLoader = e.target as URLLoader;

    // get the data as a bytearray
    var ba:ByteArray = loader.data as ByteArray;

    // uncompress it
    try
    {
        ba.uncompress();
    }
    catch ( e:Error )
    {
        trace( "The ByteArray wasn't compressed!" );
    }

    // get our xml data
    myXML = XML( ba );
}

我创建了一个用于压缩/解压缩 XML 文件的简单工具。您可以在 http://divillysausages.com/blog/xml_compressor_uncompressor 获取 SWF 和源代码如果你有兴趣

关于xml - 将 Flash (AS3) 数据保存到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6481243/

相关文章:

javascript - 我可以让 Flash 影片与 Shadowbox jquery 覆盖进行通信吗?

javascript - 为 HTML、XML、SVG 文件创建可共享的注释

c# - 使用 LINQ 创建对象

java - 本教程中的 @color/cream_dark 是什么?

actionscript-3 - SSL 在 ActionScript 3 中接受自签名证书

database - 如何通过 Flex/Air App 进行本地数据库管理

actionscript-3 - 无法扩展 Sound 对象原型(prototype)

javascript - 有效的 JavaScript 代码不是有效的 ActionScript 3.0 代码?

actionscript-3 - 从 ByteArray 获取图像大小

c# - 如何查询xsi :type from an attribute using Linq to XML?