1

我在 Flash (AS3) 中创建了一个动态阻塞地形,一切正常,地形放置正确。但是我需要包含碰撞,并且我希望这些块位于影片剪辑(精灵)中,因此我可以测试与地形本身的碰撞。

Ps:我不知道单独测试与每个块的碰撞是否会好,因为我将使用 enterframe 函数并且块生成是动态的。

我面临的问题是我有一个名为 blockHolder 的精灵,但我无法将块添加到它。

这是代码(我对其进行了简化,因此如果您将它们直接添加到舞台中,我们将在级联中创建块,例如addChild(clonedSquare)

我收到的错误: TypeError:错误 #1009:无法访问空对象引用的属性或方法。

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 将第一个街区从我的舞台上移开,所以我将其设置为 0 作为 firstY

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 回答