Actionscript 3 AS3在代码周围放置函数blah(){会在我没有的代码行上生成错误

Actionscript 3 AS3在代码周围放置函数blah(){会在我没有的代码行上生成错误,actionscript-3,Actionscript 3,我有一段代码在做我想做的事情——它生成了一个MC的网格 只要我在它周围放上函数blah()之类的东西,它就会开始生成错误,指出我没有的代码行,例如 TypeError:Error#1010:术语未定义且没有属性。 在佛罗里达州flightCellMaker::MainTimeline/myXMLtrace()[flightCellMaker\ U佛罗里达州MainTimeline::frame1:87] 在佛罗里达州flightCellMaker::MainTimeline/processFPB

我有一段代码在做我想做的事情——它生成了一个MC的网格

只要我在它周围放上函数blah()之类的东西,它就会开始生成错误,指出我没有的代码行,例如

TypeError:Error#1010:术语未定义且没有属性。
在佛罗里达州flightCellMaker::MainTimeline/myXMLtrace()[flightCellMaker\ U佛罗里达州MainTimeline::frame1:87]
在佛罗里达州flightCellMaker::MainTimeline/processFPBxml()[flightCellMaker\佛罗里达州MainTimeline::frame1:52]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
在flash.net::urloader/onComplete()上

当我把函数取出来的时候,它做了我想让它做的事情,这是怎么回事

var testXML:XML;
var myFPBxml:XML;

// Initialise a URLLoader to get XML data from XML file
var myFPBLoader:URLLoader = new URLLoader();
myFPBLoader.load(new URLRequest("flightPlannerBoard.xml"));


 // Check XML data fully loaded
 myFPBLoader.addEventListener(Event.COMPLETE, processFPBxml);


// Once the flight board planning data is loaded, save it to a variable
function processFPBxml(e:Event):void {
myFPBxml = XML(e.target.data);
myXMLtrace();
 }  


// Grab the XML data load completed and make it available elsewhere
function myXMLtrace(){
testXML = XML(myFPBxml);
}
trace("***********************" + testXML.*); This throws an error (not within myXMLtrace tho)
好的,下面是代码的其余部分,它们将自己正确运行,但不会在函数中运行:

// Create and place all the flight cells for planning and drag and drop 

// Setup 2 loops: j for columns and i for Rows
for (var j:Number =0; j < rowNum; j++){

for (var i:Number =0; i<9; i++){

    // Create copies of flightCell for board grid
    var my_mc = new flightCell();
    my_mc.name = "mc"+i+j;

    addChild(my_mc);

    // Set event Listeners on all Child objects
    my_mc.myDragShape.addEventListener(MouseEvent.MOUSE_OVER, fl_MouseOverHandler);
    my_mc.myDragShape.addEventListener(MouseEvent.MOUSE_OUT, fl_MouseOutHandler);
    my_mc.myDragShape.addEventListener(MouseEvent.MOUSE_DOWN, fl_MouseDownHandler);
    my_mc.myDragShape.addEventListener(MouseEvent.MOUSE_UP, fl_MouseUpHandler);

    Object(this).my_mc.yellowHiLite.visible = false;


    //cellPos[j] = myXML.cellPosX[j];
    //trace(stage.myXML.*);

    //trace(my_mc.name);
        my_mc.x = (100 + colWidth);
        my_mc.y = myRowHeight;

    colWidth = colWidth + 155;

    //trace(myXML.*);

    cellArray[arrayCount] = [my_mc.x, my_mc.y];
    trace("CellArrayCount = " + cellArray[arrayCount]);
    arrayCount = arrayCount + 1;
}

myRowHeight = myRowHeight + 105;
colWidth = 50;
}
my_mc.yellowHiLite.visible = false;
//创建并放置所有用于规划和拖放的飞行单元格
//设置2个循环:j用于列,i用于行
对于(变量j:Number=0;j对于(var i:Number=0;i您是将代码从它当前所在的函数中取出并从代码原来所在的位置调用新函数,还是尝试定义函数变量?
如果只将函数blah(){…}放在代码当前运行的同一位置,肯定会出现语法错误。在这种情况下,请尝试:

var blah:Function= function() { ... };
blah();

如果在函数中声明变量,则它们仅属于函数的作用域

听起来好像您正试图从代码中的其他地方访问变量

所以你需要做的是在函数之外声明你的变量

var one:VarType;
var two:VarType;

function blah():void {
 trace(one);
}

跟踪引发错误,因为它是在加载XML之前执行的

ActionScript是异步的,这意味着在加载XML时,程序会继续执行,如下所示:

  • 声明
    testXML:XML
    myFPBxml:XML
  • 创建加载程序并开始加载
  • 添加用于加载完成的侦听器
  • 跟踪
    testXML
  • 加载XML时执行
    processFPBxml
  • 如果将跟踪移动到
    myXMLTrace
    函数中,则它将正常工作


    对于新添加的代码,问题在于这一行:

    Object(this).my_mc.yellowHiLite.visible = false;
    
    这里根本不需要使用
    this
    关键字。这将在函数内部或外部工作:

    // Create and place all the flight cells for planning and drag and drop 
    
    // Setup 2 loops: j for columns and i for Rows
    for (var j:Number =0; j < rowNum; j++){
    
    for (var i:Number =0; i<9; i++){
    
        // Create copies of flightCell for board grid
        var my_mc = new flightCell();
        my_mc.name = "mc"+i+j;
    
        addChild(my_mc);
    
        // Set event Listeners on all Child objects
        my_mc.myDragShape.addEventListener(MouseEvent.MOUSE_OVER, fl_MouseOverHandler);
        my_mc.myDragShape.addEventListener(MouseEvent.MOUSE_OUT, fl_MouseOutHandler);
        my_mc.myDragShape.addEventListener(MouseEvent.MOUSE_DOWN, fl_MouseDownHandler);
        my_mc.myDragShape.addEventListener(MouseEvent.MOUSE_UP, fl_MouseUpHandler);
    
        Object(this).my_mc.yellowHiLite.visible = false;
    
    
        //cellPos[j] = myXML.cellPosX[j];
        //trace(stage.myXML.*);
    
        //trace(my_mc.name);
            my_mc.x = (100 + colWidth);
            my_mc.y = myRowHeight;
    
        colWidth = colWidth + 155;
    
        //trace(myXML.*);
    
        cellArray[arrayCount] = [my_mc.x, my_mc.y];
        trace("CellArrayCount = " + cellArray[arrayCount]);
        arrayCount = arrayCount + 1;
    }
    
    myRowHeight = myRowHeight + 105;
    colWidth = 50;
    }
    
    my_mc.yellowHiLite.visible = false;
    

    代码在函数中失败的原因是函数内外的
    this
    将是该代码所在对象的作用域。但是,当您将代码放入函数中时,您创建的引用-
    my\u mc
    -的作用域是函数的局部作用域,而不是父对象,因此
    this.my\mc
    是未定义的,因为
    不是函数范围。

    我使用函数的原因是,我可以从另一个函数访问值。如果不从另一个函数调用函数,我似乎无法获得变量值-因此我陷入了无限回归!我已在函数t之外声明了变量oo…只需将跟踪更改为://抓取已完成的XML数据加载,并使其在其他位置可用函数myXMLtrace(){testXML=XML(myFPBxml);}trace(********************************************+testXML.*);抛出一个错误var testXML:XML;var myFPBxml:XML;//初始化一个URLLoader以获取XML var myFPBLoader:URLLoader=new URLLoader();myFPBLoader.load(new URLRequest(“flightPlannerBoard.xml”);//检查加载的xml数据myFPBLoader.addEventListener(Event.COMPLETE,processFPBxml);//将其保存到变量函数processFPBxml(e:Event):void{myFPBxml=new xml(e.target.data);myXMLtrace();}//获取已完成的xml数据加载,并使其在其他位置可用函数myXMLtrace(){testXML=new-XML(myFPBxml);trace(“********************”+testXML.*);}不在注释中:D它不可读。编辑您的问题。抱歉-所有这些都是新的!只是想知道:var myFPBxml:XML;是否被myFPBxml=new-XML(e.target.data)重写了;如果是,我找不到获取(e.target.data)的方法如果不抛出错误…myFPBxml持有的xml将被覆盖是的。但一旦函数完成覆盖,您将通过引用myFPBxml而不是e.target.data.Right来访问xml,这是我的想法,但我不断得到:错误#1009:如果我在t外部跟踪myFPBxml,则无法访问空对象引用的属性或方法第二个函数-这是一个无限回归循环之类的东西!这里肯定缺少一些基本的东西…我认为使用星号作为通配符可能是问题所在:trace(“*****************************”+testXML.*);。试试trace(testXML);并查看错误是否仍然发生。我尝试过,但没有任何区别。我似乎在兜圈子。我可以访问函数中的值,但如果我将正在运行的其余代码放在函数中,它会抛出错误。可能只有函数中出现的其他代码有问题……我知道它会正确跟踪但是我需要myXMLtrace函数外部的值您可以访问函数外部的值,但在加载XML之前不能访问。得到了那个位…这就是为什么我有两个函数。一个函数正在等待完成的事件。下一个函数从该函数内部调用以运行另一个代码。问题是,如果我将其余的代码放入我已经在第二个函数中创建了(正确运行的),它抛出了一个错误。所以,这是一个循环问题…你能发布其余的代码吗?很明显,其中有些内容失去了作用域,但我无法调试我看不到的内容:)我已经编辑了原始内容,以包含不会在函数中运行的代码。