Flash Builder 4 + Flash Professional + FlashVars!=正常工作

时间:2012-05-25 17:48:55

标签: actionscript-3 flash flash-builder

我有一个Flash Builder 4项目,它连接到Flash Professional CS5 FLA。 我不使用MXML,所有代码都直接在Flash Builder中处理。 (Flash本身仅用于库,我们的艺术家更容易使用)

一切都在顺利进行,所有内容都是从嵌入SWF的站点中动态生成的XML中运行的。但到目前为止,我已经在动作脚本中对XML路径进行了硬编码。我希望不要这样做。

我已经完成了关于将FlashVars放入FB4 / As3的最少45个教程,而且似乎没有什么工作正常。 老学校<嵌入>方法,使用<对象>方法,甚至使用swfObject方法,我似乎无法访问这些flashvar属性。

这是我现在拥有的HTML:

<script>
    var flashvars = {
        xml: "/mapsystem/xml"
    }; // yes that is definitely the correct path, its the same value as when it was hardcoded
    $(function() {
        swfobject.embedSWF("/flash/map.swf", "map", "960", "885", "10.0.0", "expressInstall.swf", flashvars);
    });
</script>
<div id="map">
    swfObject Aint Working
</div>

继承动作脚本(这是我的文档课,第一件事)

package
{
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;

import src.GlobalStage;
import src.Map;
import src.Styles;

public class map extends GlobalStage
{
    public var xmlDoc = "map.xml";

    public function map()
    {   
        var test:TextField = new TextField();
        test.x = 50;
        test.y = 50;
        test.autoSize = TextFieldAutoSize.LEFT;
        test.text = "XML Doc: ";
        this.addChild(test);

        var test2:TextField = new TextField();
        test2.x = 50;
        test2.y = 80;
        test2.multiline = true;
        test2.border = true;
        test2.autoSize = TextFieldAutoSize.LEFT;
        test2.text = "Parameters: \n";
        test2.appendText("Total Parameters: ");

        this.addChild(test2);

        var _params:Object;

        if ( this.loaderInfo.parameters.length != null ) {
            _params = this.loaderInfo.parameters;
        } else {
            // run alt code to init
        }

        for(var pItem:String in _params) {

            test2.appendText("Name: " + pItem + " :: " + _params[pItem] + "\n" );  
        }

                    if(_params['xml'] != null) xmlDoc = _params['xml'];


        test.appendText(xmlDoc);

        var map:Map = new Map(xmlDoc);

现在,当我在本地测试中运行时,没有按预期显示,但当涉及到站点本身时,使用传递的flashvar,xmlDoc仍为“map.xml”,我的计数器告诉我有0个参数,当然我的参数列表中没有显示任何内容。

我花了8个小时试图让它发挥作用,坦率地说,我正在失去头发并为此而睡觉。

2 个答案:

答案 0 :(得分:1)

loaderInfo.parametersObject,因此此if语句中的条件永远不可能为真(除非您的flashVars有一个名为'length'的参数):

if (this.loaderInfo.parameters.length != null) {

因此,不检查长度是否为空,只需检查参数是否为空:

if (loaderInfo.parameters) {

答案 1 :(得分:0)

loaderInfo.parameters是一个对象,它永远不会为null。你必须要做的就是检查你的flashvar是否存在:

if (loaderInfo.parameters.xml)
{
  var xmlPath:String = loaderInfo.parameters.xml
  // start using xml
}
else
 // run alt code to init
}