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:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。Map / match()[G:_flash \ edu \ drag_drop \ Map.as:34] at DragDrop / drop()[G:_flash \ edu \ drag_drop \ DragDrop.as:41]

これは、現在null値であるグローバル配列「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値を参照できる、より洗練されたソリューションがあるかどうか疑問に思いました。

4

1 に答える 1

1

コンストラクターで直接「ドラッグドロップ」に割り当てることができ、それによってインスタンス変数を初期化します。Mapコンストラクターの最初の行にある前の「var」を削除するだけです。

于 2013-02-01T21:01:55.680 に答える