splice对象成嵌套数组代码错误

时间:2010-07-12 15:43:05

标签: flash actionscript-3 arrays

我试图通过使用splice替换嵌套数组(colArray)中的Object,该对象充当我的播放器,需要在其所在的数组周围进行操作。 问题是拼接似乎没有显示任何回报,它出现了一个错误说: 无法访问null对象引用的属性或方法。

我做错了什么?如何在阵列周围移动我的playerObject? 我已经尝试过多次今晚解决这个问题,如果我的一些代码效率低下请纠正我。提前致谢。

var gridContainerMC:MovieClip = new MovieClip();
var gridSize:Array = [col,row]; //Rows, Columns
var gridArray:Array = new Array();

var col:Number = 44;
var row:Number = 33;
var mapWidth:Number = 800; // set size correct 
var mapHeight:Number = 600;
var sepCols:Number; 
var sepRows:Number;
var menuHeight:int = 2;
// remove rows for menu
gridSize[1] = row-menuHeight;
var colArray:Array

buildGrid();
//posPlayer();
function buildGrid() { 
sepCols = mapWidth / col;
sepRows = mapHeight / row;
// declare increment varibles
var i:int;
var n:int;
    // creates nested Array
    for (i = 0; i < gridSize[0]; i++) {
        colArray = new Array();
        for (n = 0; n < gridSize[1]; n++) {
            var tileObject:MovieClip = createClip();
            tileObject.x = i * (tileObject.width - 1);
            tileObject.y = n * (tileObject.width - 1);
            gridContainerMC.addChild(tileObject);
            colArray.push(tileObject);
        }
        gridArray.push(colArray);
    } 
    this.addChild(gridContainerMC);
    var playerObject:MovieClip = createCharacter();
    this.addChild(colArray.splice(1, 0, playerObject));
    trace(playerObject);
} // endOf BuildGrid 

function createClip ():MovieClip {
    var returnClip:MovieClip = new MovieClip();
    returnClip.graphics.lineStyle(1,0x8C8C8C);
    returnClip.graphics.beginFill(0xc2c2c2, 1);  
    returnClip.graphics.drawRect(0, 0, sepCols, sepRows);
    returnClip.graphics.endFill();
    return returnClip;
} // endOf createClip

function createCharacter():MovieClip {
    var playerClip:MovieClip = new MovieClip();
    playerClip.graphics.lineStyle(1, 0x999999);
    playerClip.graphics.beginFill(0x000000); //990033
    playerClip.graphics.drawRect(0, 0, sepCols, sepRows);
    playerClip.graphics.endFill();
    return playerClip;
}

2 个答案:

答案 0 :(得分:0)

splice返回一个数组,所以你应该尝试

this.addChild(colArray.splice(1, 0, playerObject)[0]);

或更好

colArray.splice(1, 0, playerObject);
this.addChild(playerobject);

答案 1 :(得分:0)

您是否需要替换阵列中的元素#1?或者您是否尝试替换元素#1,以便新对象出现在数组顶部附近?元素0是任何数组中的实际第一个元素....

通过使用下面的代码,您实际上只是删除元素。通过对你的第二个参数使用“0”,你告诉方法在索引“1”处删除数组元素,所以,我相信附加参数(playerObject)只是被忽略了:

colArray.splice(1, 0, playerObject);

如果你想简单地添加元素,我会使用push()方法:

colArray.push(playerObject);

如果要删除索引1处的元素,请使用:

colArray.splice(1, 0);

此外,通过使用拼接方法,您实际上开始传递结果。它不是一个数组(除非你删除多个元素)。它是该特定索引处数组的内容。

因此,如果您想从数组中删除该项目,然后将其添加到舞台:

playerObject = colArray.splice(1, 0);
this.addChild( playerObject );

如果将对象实例化为MovieClip时出现问题,您可以将其强制转换为特定类型的对象,因为Flash允许多种类型的对象:Object,MovieClip,DisplayObject ......

this.addChild( MovieClip( playerObject ) );

或尝试....     this.addChild(playerObject as MovieClip);

或尝试....     this.addChild(playerObject as DisplayObject);

希望这有帮助。