我试图通过使用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;
}
答案 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);
希望这有帮助。