将影片剪辑添加到2D阵列中

时间:2013-08-25 10:28:27

标签: arrays actionscript-3 2d

package 
{

import flash.events.Event;
import flash.display.MovieClip;

// class 
public class GameGrid extends MovieClip
{
    private var gameHeight:Number = 600;
    private var gameWeight:Number = 800;
    private var gridHeight:Number = 50;
    private var gridWeight:Number = 50;
    private var rowNumber:int = 12;
    private var columnNumber:int = 16;
    private var backgroundGrid:Array = new Array(12,16);
    private var foregroundGrid:Array = new Array(12,16);

    function GameGrid(){

    }

    function addBackGrid(rowN:int,colN:int,mcObject:MovieClip)
    {
        backgroundGrid[rowN,colN].push(mcObject);
    }

    function addForeGrid(rowN:int,colN:int,mcObject:MovieClip)
    {
        foregroundGrid[rowN,colN].push(mcObject);
    }

    function calculateRowDiff(rowA:int,rowB:int):Number
    {
        return Math.abs(rowA-rowB);
    }
    function calculateColDiff(colA:int,colB:int):Number
    {
        return Math.abs(colA-colB);
    }
    function calculateCorDiff(colA:int,colB:int,rowA:int,rowB:int):Number
    {
        return Math.sqrt((calculateRowDiff(rowA,rowB) * calculateRowDiff(rowA,rowB)) + (calculateColDiff(colA,colB) * calculateColDiff(colA,colB)));
    }
    // add to stage
    function paintbackgroundGrid()
    {
        for (var i:int=0; i<16; i++)
        {
            for (var j:int=0; j<12; j++)
            {
                MovieClip(backgroundGrid[i,j]).x = i * 50;
                MovieClip(backgroundGrid[i,j]).y = j * 50;
                stage.addChild(MovieClip(backgroundGrid[i,j]));
            }
        }
    }
}


}

所以这个GameGrid类的作用是保存一个网格数组(或扩展MovieCLip的tile),它将被添加到主阶段并调用initializeItem函数。

function InitializeItem(e:Event)
    {
        var gamemap = new GameGrid();
        var mc:MovieClip = new MainCharacter();
        gamemap.addBackGrid(1,1,mc);
        gamemap.paintbackgroundGrid();
        //trace("Year: "+gameTime.gameYear+" Month: "+gameTime.gameMonth+" Day: "+gameTime.gameDay+"  "+gameTime.gameHour+":"+gameTime.gameMinute+":"+gameTime.gameSecond);

    }

initializeItem应创建一个gamegrid实例,并将movieclips添加到各自的位置(使用数组存储)并显示它们。 这是错误堆栈跟踪:

ReferenceError:错误#1069:在Number上找不到属性1,并且没有默认值。     在GameGrid / addBackGrid()

调试器建议错误来自行backgroundGrid [rowN,colN] .push(mcObject); 有没有办法可以容纳2d数组动画片段?我是AS3的新手,看起来和JAVA非常相似,我错过了什么?

1 个答案:

答案 0 :(得分:2)

试试这个

private var backgroundGrid = [];

function addBackGrid(rowN:int,colN:int,mcObject:MovieClip) {

    if (backgroundGrid[rowN] == null) {

         backgroundGrid[rowN] = [];

    }

    backgroundGrid[rowN][colN] = mcObject;
}

在as3中,下面的代码表示创建一个数组,数组包含两个元素,一个是12,另一个是16。

 private var backgroundGrid:Array = new Array(12,16);