0

这看起来很长,但这是一个非常简单的问题。使用以下代码:

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:无法访问空对象引用的属性或方法。在 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() 构造函数中引用拖放值。

4

1 回答 1

1

您可以直接在构造函数中分配给“dragdrops”,从而初始化实例变量。只需在 Map 构造函数的第一行中删除前面的“var”。

于 2013-02-01T21:01:55.680 回答