对象重叠逻辑

时间:2012-05-31 17:44:34

标签: actionscript-3

下面是添加到舞台然后检查新添加的对象是否与先前对象重叠的对象的代码。问题是当玩家移动时,舞台上的物体会因为随机物体的不断生成而随机移动。这在输入帧定时器中调用

if(onStageCount < 15){
        var Square:MovieClip;
        Square = new mcSquare();
        Square.x = Math.random() * 1000 + ((Math.abs(_boundaries.x) + (stage.stageWidth)));
        Square.y = Math.random() * stage.stageHeight/2.5 + (stage.stageHeight/2.5);
        ObjectArray.push(Square);
        onStageCount += 1;
    }
    for (var i in ObjectArray){
        for (var a in ObjectArray){
            if(ObjectArray[i].hitTestObject(ObjectArray[a]) && a != i){ChildrenColliding = true;}
            while(ChildrenColliding){
            ObjectArray[i].x += (ObjectArray[a].width + 75);
            ObjectArray[i].y += (ObjectArray[a].height + 40);
            ChildrenColliding = false;
                if(ObjectArray[a].hitTestObject(ObjectArray[i]) && a != i){ChildrenColliding = true;}
            }
        }
        _boundaries.addChild(ObjectArray[i]);
    }

1 个答案:

答案 0 :(得分:1)

该代码每次调用时都会生成一个平台。如果您想要多次出现(即在单个计时器事件中),您可以将开头的if更改为while。这将使它生成平台,直到每次调用函数时都有15个。

无论何时放置平台,您都不需要检查每个可能的碰撞 - 已经存在的平台很好。您可以使用一个for ... in循环,针对Square测试每个对象,并在必要时移动Square。这应该可以防止对象在平台生成期间“随机移动”。虽然以与第一次相同的方式重新生成位置可能会更好,而不是将它们偏移特定量。

要在屏幕上生成某些平台,最简单的方法是在第一次生成平台时使用不同范围的x值。您也可以像往常一样生成它们,并在游戏开始时将它们向前移动一些。虽然,有很多方法,但如果不了解整个游戏的运作方式,很难说哪个是最好的。