2

我一直在尝试在我最近从事的一个项目中设置一个 hitTestObject 函数,但遇到了一些困难。

这是因为我正在尝试使用通过 For 循环动态添加的 MovieClip 实例来执行此操作。添加的影片剪辑被称为“方形”,当我左键单击鼠标时,我将一系列这些影片剪辑添加到舞台。我的问题是我想听一个'square'的hitTestObject拦截'square'以及随后添加相同的MovieClip。

我已经设置了一个数值变量,每次通过左键单击将“方形”电影剪辑组添加到舞台时,该变量递增 1,并且我已经分配了这个数字以及一个字符串以组合在一起以创建一个 square.name实例。

在我的情况下,添加的第一组 MovieClip 将有一个名为“Square 1”的 .name 实例,然后在第二次鼠标单击时具有“Square 2”,依此类推。

我还添加了每个名称并将其推送到容器数组中以供以后引用。

那么如何使用我的 .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 回答