-1

下面是添加到舞台的对象的代码,然后检查新添加的对象是否与以前的对象重叠。问题是当玩家移动时,由于不断生成随机对象,舞台上的对象会随机移动。这在进入帧计时器中调用

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]);
    }
4

1 回答 1

1

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

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

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

于 2012-06-05T19:35:27.367 回答