0

私は配列で新しいことを試みており、いくつかの問題を抱えています。1 つのクラスの複数のインスタンスを作成し、それらを配列に入れようとしています。

私は次のようにインスタンスを作成しています:

public function creatingitem(e:TimerEvent)
    {
    amtcreated = Math.ceil(Math.random() * 4);
    while (amtcreated >= 1)
            {
                amtcreated--;
                var i:Number = Math.ceil(Math.random() * 3);
                switch (i)
                {
                    case 1 :
                        //Object1
                        objectnum = 1;
                        objectwei = 3;
                        r = new Board(objectnum,objectwei,stagw,stagh);
                        addChild(r);
                        fallingitem.push(r);
                        break;
                    case 2 :
                        //Object2
                        objectnum = 2;
                        objectwei = 4;
                        c = new Board(objectnum,objectwei,stagw,stagh);
                        addChild(c);
                        fallingitem.push(c);
                        break;
                    case 3 :
                        //Object3
                        objectnum = 3;
                        objectwei = 4;
                        l = new Board(objectnum,objectwei,stagw,stagh);
                        addChild(l);
                        fallingitem.push(l);
                        break;
                    default :
                        break;
                }
            }
}

これらが作成されると、メイン ボールと衝突するかどうかがチェックされます。

        public function hitcheck(e:Event)
    {
        for (var v:int = fallingitem.length - 1; v >= 0; v--)
        {
            if (ball.hitTestObject(fallingitem[v]))
            {
                                 trace(fallingitem[v]);
                if (fallingitem[v] == r)
                {
                    bonusscore +=  100;
                    fallingitem[v].removeitem();
                }
                else if (fallingitem[v] == c)
                {
                    bonusscore +=  75;
                    fallingitem[v].removeitem();
                }
                else if (fallingitem[v] == l)
                {
                    bonusscore +=  75;
                    fallingitem[v].removeitem();
                }

trace(bonusscore);
            }
        }
    }

問題は、トレース機能が原因ですべてのアイテムがヒットしていることです。すべてのインスタンスが if 条件を満たしているわけではありません。例として、2 つの "r" インスタンスを持つことができ、両方をヒットすると、1 つが通過してスコアに追加され、もう 1 つが通過し続けます。hitTestObject の直後のトレースは、両方がヒットして登録されていることを示していますが、スコアが追加されない理由はわかりません。

ありがとうございました、

4

1 に答える 1

0

r実際には2つのインスタンスを持つことはできません。インスタンスを作成しているときに、たまたま2を作成するrと、2番目のr = new Board...ステートメントが参照を上書きし、変数rは2番目のステートメントを参照します。両方のオブジェクトはまだ存在しますが、変数はそのうちの1つしか参照できないため、チェックを実行すると、以前に設定されていたが、現在は設定されてrいないオブジェクトが無視されます。

これを修正するには、、をsに変換しr、インスタンスを作成するたびに、それを適切な配列に追加します。次に、を使用してチェックを実行します。これは、オブジェクトが配列内にあるかどうかを返します。clArray(r.indexOf(fallingitem[v]) != -1)true

もう1つの方法は、提供されたコードに基づいて、コンストラクターで設定されている値をチェックするobjectnumことです。これは、r、c、またはlカテゴリにあるかどうかに基づいて値を設定しているためです。ただし、プロパティがプライベートであるか、変更される可能性がある場合は機能しません。

于 2012-06-15T13:17:04.213 に答える