AS3:比较同一类的两个(或更多)无名实例(在舞台上)?

时间:2013-12-23 01:09:20

标签: actionscript-3 flash class instance dynamically-generated

如何引用同一个类的另一个实例?它们都没有任何名称,因为它们是通过代码生成的。每次生成随机数量的实例。我需要比较它们。感谢。

这是我在时间轴上生成的代码(生成实例)。

var minLimit:uint = 1;
var maxLimit:uint = 10;
var range:uint = maxLimit - minLimit;
var p:Number = Math.ceil(Math.random()*range) + minLimit;

for (p; p <= maxLimit; p += 1)
{
    var myCell:Cell = new Cell();
    var xminLimit:uint = 100;
    var xmaxLimit:uint = 300;
    var xrange:uint = xmaxLimit - xminLimit;
    var xp:Number = Math.ceil(Math.random()*xrange) + xminLimit;
    addChild(myCell);
    myCell.x = xp
    myCell.y = xp
    myCell.scaleX = 3
    myCell.scaleY = 3        

}


var listOfCells:Array = new Array();

for (var i:int =0; i < (root as MovieClip).numChildren; i++)
{
    listOfCells.push((root as MovieClip).getChildAt(i));
}

trace(listOfCells)

var len:int = listOfCells.length;
for (var j:int =0; j < len; j++)
{
    trace(listOfCells[j].x);
}


trace("Cells on stage: " + Cell.count);

游戏会随机出现一些细胞。为了编码,他们有时会更接近并相互检查,我需要知道如何比较它们。例如,我可以在类中放入代码 - 如:this this.x&lt; OTHER(同一类).x所以我可以比较同一类中的两个不同实例。

1 个答案:

答案 0 :(得分:0)

比较细胞并让它们相互移动,如果它们相距200px以下(例如):

var maxDistance: Number = 200;
var minDistance: Number = 20;

var len:int = listOfCells.length;
for (var j:int =0; j < len; j++)
{
    var cell: Cell = listOfCells[j];
    for(var k:int = 0; k < len; k++)
    {
        var cellToCompare = listOfCells[k];
        if(cellToCompare != cell) {
            var dx: Number = cellToCompare.x - cell.x;
            var dy: Number = cellToCompare.y - cell.y;
            var distance : Number = Math.sqrt(dx * dx + dy * dy);
            if(distance < maxDistance && distance > minDistance) {
                cell.x = cell.x + dx * 0.1;
                cell.y = cell.y + dy * 0.1;
            }
        }
    }
}

另外,为了确保数组只包含Cell实例,请使用'is'运算符:

var listOfCells:Array = new Array();
for (var i:int =0; i < (root as MovieClip).numChildren; i++)
{
    var child: DisplayObject = (root as MovieClip).getChildAt(i);
    if(child is Cell) {
        listOfCells.push(child);
    }
}