1
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 的图块),它将被添加到主舞台并调用 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 实例,并将影片剪辑添加到它们各自的位置(使用数组存储)并显示它们。这是错误堆栈跟踪:

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

调试器提示错误来自行 backgroundGrid[rowN,colN].push(mcObject); 有没有办法可以保存二维数组影片剪辑?我是 AS3 的新手,它看起来与 JAVA 非常相似,我错过了什么?

4

1 回答 1

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);
于 2013-08-25T11:56:27.250 回答