我有一块代码正在做我想做的事情 - 它会生成一个MC的网格。
当我在它周围添加类似函数blah()之类的东西时,它会开始生成错误,指示我没有的代码行。例如
TypeError:错误#1010:术语未定义且没有属性 at flightCellMaker_fla :: MainTimeline / myXMLtrace()[flightCellMaker_fla.MainTimeline :: frame1:87]
at flightCellMaker_fla :: MainTimeline / processFPBxml()[flightCellMaker_fla.MainTimeline :: frame1:52]
在flash.events::EventDispatcher/dispatchEventFunction()
在flash.events :::EventDispatcher / dispatchEvent()
在flash.net::URLLoader/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;
}
答案 0 :(得分:2)
您的跟踪引发了错误,因为它是在加载XML之前执行的。
ActionScript是异步的,这意味着在加载XML时,程序执行继续进行,看起来像这样:
testXML:XML
和myFPBxml:XML
testXML
processFPBxml
如果您将跟踪移动到myXMLTrace
功能,那么它将正常工作。
使用新添加的代码,问题在于这一行:
Object(this).my_mc.yellowHiLite.visible = false;
此处无需使用this
关键字。这将在函数内部或外部工作:
my_mc.yellowHiLite.visible = false;
您的代码在函数内部失败的原因是因为函数this
的内部和外部将是此代码所在的对象的范围。但是,当您将代码放入函数时,您创建的引用 - my_mc
- 本地作用于函数,而不是父对象,因此this.my_mc
未定义,因为{{1} }不是函数范围。
答案 1 :(得分:0)
您是从当前的函数中取出代码并从以下代码调用新函数吗?或者您是否尝试定义函数变量? 如果你只是将函数blah(){...}放在它当前运行的同一个地方的代码中,你肯定会得到一个语法错误。在这种情况下,请尝试:
var blah:Function= function() { ... };
blah();
答案 2 :(得分:0)
如果在函数中声明变量,它们只属于函数的范围。
听起来您正试图从代码中的其他位置访问变量。
所以你需要做的就是在函数之外声明你的变量。 e.g。
var one:VarType;
var two:VarType;
function blah():void {
trace(one);
}