1

フラッシュ (AS3) で動的にブロックされた地形を作成していますが、すべてうまくいき、地形は正しく配置されています。しかし、衝突を含める必要があり、ブロックをムービークリップ (スプライト) 内に配置して、地形自体との衝突をテストできるようにします。

Ps: enterframe 関数を使用し、ブロック生成は動的であるため、各ブロックとの衝突を個別にテストするのが良いかどうかはわかりません。

私が直面している問題は、blockHolder というスプライトがあることですが、それにブロックを addChild できません。

コードは次のとおりです (単純化したので、 addChild(clonedSquare)のようにブロックをステージに直接 addChild すると、カスケードでブロックが作成されます。

私が受け取っているエラー: TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。

var blockHolder:Sprite = new Sprite();

var clonedSquare = new square();

var lowestPoint:int = 10;
var highestPoint:int = 20;
var areaLenght:int = 10;

function createLvl():void
{
    for (var i:Number = 0; i<(areaLenght); i++)
    {
        clonedSquare = new square();
        clonedSquare.x = i * clonedSquare.width;
        //sets the height of the first block
        if (i == 0)
        {
            var firstY:Number = Math.ceil(Math.random()*((lowestPoint-highestPoint))+highestPoint)*clonedSquare.height;
            clonedSquare.y = firstY;
            trace("terrain begins " + firstY + " px down");
        }
        else
        {
                var previousId:Number = i - 1;
                clonedSquare.y = getChildByName("newSquare"+previousId).y + clonedSquare.height;
        }
        //sets the entity (block) name based on the iteration
        clonedSquare.name = "newSquare" + i;
        //adds the cloned square
        blockHolder.addChild(clonedSquare);
    }
    addChild(blockHolder);
}

createLvl();
4

1 に答える 1

0

さて、私はエラーを修正しました。あなたが何を求めているのか、私はまだはっきりしていません。基本的に、各ブロックを配列に追加し、そのブロックを参照します。あなたclonedSquare.y = getChildByName("newSquare"+previousId).y + clonedSquare.height;はエラーを投げていました。また、あなたの firstY は最初のブロックを私のステージから離れた場所に配置していたので、firstY として 0 に設定しました

var blockHolder:Sprite  = new Sprite();
var squares:Array       = [];
var lowestPoint:int     = 10;
var highestPoint:int    = 20;
var areaLenght:int      = 10;

function createLvl():void
{
    for (var i:Number = 0; i<(areaLenght); i++)
    {
        var clonedSquare = new square();
        clonedSquare.x = i * clonedSquare.width;
        if (i == 0)
        {
            var firstY:Number = Math.ceil(Math.random()*((lowestPoint-highestPoint))+highestPoint)*clonedSquare.height;
            //clonedSquare.y = firstY;
            clonedSquare.y = 0;
            trace("terrain begins " + firstY + " px down");
        }
        else
        {
            clonedSquare.y = squares[i - 1].y + clonedSquare.height;
        }
        blockHolder.addChild(clonedSquare);
        squares.push(clonedSquare);
    }
    addChild(blockHolder);
}
createLvl();
于 2012-10-04T18:53:37.260 に答える