2

最近取り組んでいるプロジェクトでhitTestObject関数を設定しようとしましたが、いくつかの問題が発生しました。

これは、Forループを介して動的に追加されたMovieClipインスタンスを使用して実行しようとしているためです。追加されるMovieClipsは「正方形」と呼ばれ、マウスクリックを終了すると、これらの一連のMovieClipsがステージに追加されます。私の問題は、「square」をインターセプトする「square」のhitTestObjectと、それに続く同じMovieClipの追加をリッスンしたいということです。

ステージに左クリックして「square」MovieClipsのグループを追加するたびに1ずつ増加する数値変数を設定し、この番号を文字列と一緒に割り当てて、square.nameを作成します。実例。

私の場合、追加されたMovieClipsの最初のグループには、「Square 1」という名前のインスタンスがあり、2回目のマウスクリックで「Square2」というようになります。

また、後で参照できるように、各名前をコンテナ配列に追加してプッシュしました。

では、.nameインスタンスと配列を使用して、hitTestObject引数でこれらの動的な名前を実際に参照するにはどうすればよいですか?

私はそれが明白であると確信しており、私は基礎を築いたので、これを私に指摘する助けは大いに評価されるでしょう。

どうもありがとう。

4

1 に答える 1

0

これは、タイムラインでこれを実行しようとしていて、ライブラリに「Square」というMovieClipサブクラスがあると仮定した場合の可能な方法です。hitTestsの実行中に配列を変更することに注意してください。正方形を削除する場合は、すべてのテストが完了するまで待つか、正方形の配列のコピーを作成します。

var squares: Array = [];

function addSquares(n: int): void {
    var square: MovieClip;

    for (var i: int = 0;
    i < n;
    i++) {
        square = new Square();
        square.name = "square" + i;
        addChild(square);
        squares.push(square);
    }
}


function checkHits(): void {
    var square: MovieClip;
    var checkSquare: MovieClip;

    for (var i: int = 0;
    i < squares.length;
    i++) {
        square = squares[i];

        for (var j: int = i + 1;
        j < squares.length;
        j++) {
            checkSquare = squares[j];

            if (square.hitTestObject(checkSquare)) {
                squaresHit(square, checkSquare);
            }
        }
    }
}


function squaresHit(square1, square2): void {
    // do something
    trace("squaresHit:" + square1.name + "," + square2.name);
}


addSquares(4);
checkHits();

//squaresHit:square0,square1
//squaresHit:square0,square2
//squaresHit:square0,square3
//squaresHit:square1,square2
//squaresHit:square1,square3
//squaresHit:square2,square3
于 2012-10-11T22:46:01.133 に答える