这看起来很长,但这是一个非常简单的问题。使用以下代码:
public class Map extends MovieClip
{
var dragdrops:Array;
var numOfMatches:uint = 0;
var speed:Number = 25;
public function Map()
{
// constructor code
var dragdrops = [one_mc,two_mc,three_mc,four_mc,five_mc,six_mc];
var currentObject:DragDrop;
for (var i:uint = 0; i < dragdrops.length; i++)
{
currentObject = dragdrops[i];
currentObject.target = getChildByName(currentObject.name + "_target");
}
}
public function match():void
{
numOfMatches++;
if(numOfMatches == dragdrops.length)
{
win.addEventListener(Event.ENTER_FRAME, winGame);
}
}
我收到此错误
TypeError:错误#1009:无法访问null的属性或方法 对象参考。 at Map / match()[G:_flash \ edu \ drag_drop \ Map.as:34] 在DragDrop / drop()[G:_flash \ edu \ drag_drop \ DragDrop.as:41]
我认为这是因为我引用了当前为空值的全局数组“dragdrops”。
但是,通过将dragdrops.length值传递给另一个全局变量,下面的代码可以正常工作。
public class Map extends MovieClip
{
var dragdrops:Array;
var dragdropslength:Number = 0;
var numOfMatches:uint = 0;
var speed:Number = 25;
public function Map()
{
// constructor code
var dragdrops = [one_mc,two_mc,three_mc,four_mc,five_mc,six_mc];
var currentObject:DragDrop;
for (var i:uint = 0; i < dragdrops.length; i++)
{
currentObject = dragdrops[i];
currentObject.target = getChildByName(currentObject.name + "_target");
}
dragdropslength = dragdrops.length
}
public function match():void
{
numOfMatches++;
if(numOfMatches == dragdropslength)
{
win.addEventListener(Event.ENTER_FRAME, winGame);
}
}
虽然这很好用,但我想知道是否有更优雅的解决方案能够在没有额外变量的情况下从Map()构造函数中引用dragdrops值。
答案 0 :(得分:1)
你可以分配给&#34;拖拽&#34;直接在构造函数中,从而初始化实例变量。只需删除前面的&#34; var&#34;在Map构造函数的第一行。