2013-08-25 7 views
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类做的是认为将被添加到主舞台,并调用initializeItem功能网格(或瓷砖扩展了MovieClip)的阵列。添加电影剪辑成二维数组

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:在数字上找不到属性1,并且没有默认值。 在GameGrid/addBackGrid()

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

回答

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); 
+0

谢谢,它的工作,尽管它需要我创建另一个函数来手动将所有16行和12列“初始化”为空。 –