склейка объекта во вложенный код массива - PullRequest
0 голосов
/ 12 июля 2010

Я пытаюсь заменить Объект внутри моего вложенного массива (colArray) с помощью сплайса, объект действует как мой игрок и должен будет маневрировать вокруг Массива, в котором он находится. Проблема в том, что сплайс, похоже, ничего не показываетв свою очередь, возникает ошибка: не удается получить доступ к свойству или методу пустой ссылки на объект.

Что я делаю не так?И как мне двигаться с моим 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 голосов
/ 12 июля 2010

Вам нужно заменить элемент # 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 );

Если естьпроблема создания экземпляра объекта как мувиклипа. Вы можете привести его к объекту определенного типа, поскольку Flash допускает несколько типов объектов: объект, мувиклип, объект отображения ...

this.addChild( MovieClip( playerObject ) );

или попробуйте ....this.addChild (playerObject as MovieClip);

или попробуйте .... this.addChild (playerObject as DisplayObject);

Надеюсь, это поможет.

0 голосов
/ 12 июля 2010

splice возвращает массив, поэтому вы должны попробовать

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

или лучше

colArray.splice(1, 0, playerObject);
this.addChild(playerobject);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...