0

as3を使用してプラットフォーマーを作成していますが、movieclip _boundariesの子がステージ上にあるかどうかを確認する必要があります。そうすれば、子を削除してカウンターを下げ、より多くの子が継続的に生成されるようにすることができます。これまでのところ、私が持っているのは以下のすべてです。助けてください、数週間これに固執しています。

var ObjectArray:Array = [];
var ChildrenColliding:Boolean = false;
var onStageCount:Number = 0;
function generateObjects():void{    
    if(_vx > 0 && onStageCount < 20){
        var Square:MovieClip;
        Square = new mcSquare();
        Square.x = Math.random() * 1000 + (Math.abs(_boundaries.x) + 50);
        Square.y = Math.random() * stage.stageHeight/2.5 + (stage.stageHeight/2.5);
        ObjectArray.push(Square);
        _boundaries.addChild(Square);
        onStageCount += 1;
    }
    for(var i in ObjectArray){
        Square[i] = Square.name;
        for(var a in ObjectArray){
            if(ObjectArray[i].hitTestObject(ObjectArray[a]) && a != i){ChildrenColliding = true;}
            while(ChildrenColliding){
            ObjectArray[i].x += (ObjectArray[a].height + 25);
            ObjectArray[i].y += (ObjectArray[a].width + 25);
            ChildrenColliding = false;
                if(ObjectArray[a].hitTestObject(ObjectArray[i]) && a != i){ChildrenColliding = true;}
            }
        }
    }
    //CHECK TO SEE IF CHILDREN ARE ON STAGE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    for(var w in ObjectArray){
        if(_boundaries){
            onStageCount -= 1;
            trace("removed");
            _boundaries.removeChild(ObjectArray[w]);
            ObjectArray.splice(w, 1);
        }
    }
}
4

2 に答える 2

1

localToGlobalこのメソッドを使用して、正方形オブジェクトの位置を決定する必要がある場合があります。何かのようなもの:

for (var w in ObjectArray) {
    if (_boundaries) {
        var sq:MovieClip = ObjectArray[w];
        var pnt:Point = _boundaries.localToGlobal(new Point(sq.x, sq.y));
        if (pnt.x <= 0 || pnt.x >= _boundaries.stage.stageWidth || 
            pnt.y <= 0 || pnt.y >= _boundaries.stage.stageHeight) {

            // remove square
            onStageCount -= 1;
            trace("removed");
            _boundaries.removeChild(ObjectArray[w]);
            ObjectArray.splice(w, 1);
        }
    }
} 

一般的なベストプラクティスの補足として、クラス名(MovieClip、Sprite、MyCustomClassなど)には大文字で始まる単語を予約し、変数名にはキャメルケースを使用します。他の開発者と協力してベストプラクティスを推進する場合に役立ちます。

お役に立てれば。

于 2012-05-29T22:36:38.060 に答える
0

これを試して:

//CHECK TO SEE IF CHILDREN ARE ON STAGE!!!!!!!!!!
for(var w in ObjectArray){
    if(_boundaries && _boundaries.contains(ObjectArray[w])){
        onStageCount -= 1;
        trace("removed");
        _boundaries.removeChild(ObjectArray[w]);
        ObjectArray.splice(w, 1);
    }
}
于 2012-05-29T18:10:39.203 に答える