AS3 - 通过For循环添加动态MovieClip的hitTestObject

时间:2012-10-11 19:27:40

标签: actionscript-3

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

这是因为我正在尝试使用For循环动态添加的MovieClip实例。正在添加的MovieClip被称为'square',当我离开Mouse Click时,我将一系列这些MovieClip添加到舞台上。我的问题是我想听一个'square'截取'square'的hitTestObject以及随后添加的相同MovieClip。

我已经设置了一个数字变量,每次我通过左键单击将“square”MovieClip组添加到舞台时,该数字变量增加1,我已将此数字与字符串一起分配,以组合在一起创建一个square.name instance。

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

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

那么如何使用我的.name实例和数组实际在hitTestObject参数中引用这些动态名称?

我确信这是显而易见的,而且我已经完成了基础工作,所以任何有助于指出这一点的帮助都会受到极大的关注。

非常感谢。

1 个答案:

答案 0 :(得分: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