help!
Anyone familiar with tiles,multidimentional arrays and class file?
I am doing a tile based game; buttons with
Lots of multidimentional arrays and using .as as the class and import them to my .fla file.
the tile map is finished. like you can see in the picture.
This is my code for the Tiles.as file;
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
public class Tiles extends MovieClip {
private const PIPE_BL:Number=0;
private const PIPE_BTM:Number=1;
private const PIPE_3WR:Number=2;
private const PIPE_DUM:Number=3;
private const PIPE_4W:Number=4;
private const PIPE_3WL:Number=5;
private const PIPE_TR:Number=6;
private const PIPE_R:Number=7;
private const PIPE_L:Number=8;
private const PIPE_TL:Number=9;
private const STARTX:Number = 62.5;
private const STARTY:Number = 125.5;
private const TILE_SIZE:Number = 25;
private var tiles_array:Array = new Array();
private var coordX:Number = 0;
private var coordY:Number = 15;
private var segment:MovieClip;
private var isFlowing:Boolean = true;
private var row1_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_B L,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM);
private var row2_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_B L,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM);
private var row3_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_3WR,PIPE_DUM,PIPE_DUM,PIPE_4W,PIPE_DUM,PIPE _DUM,PIPE_3WL,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM);
private var row4_array:Array=new Array(PIPE_TR,PIPE_R,PIPE_R,PIPE_3WL,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,P IPE_BTM,PIPE_BL,PIPE_BL,PIPE_3WR,PIPE_L,PIPE_L,PIPE_TL);
private var row5_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_B L,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM);
private var row6_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_3WR,PIPE_L,PIPE_L, PIPE_TL,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM);
private var row7_array:Array=new Array(PIPE_3WR,PIPE_DUM,PIPE_DUM,PIPE_4W,PIPE_DUM,PIPE_DUM,PIPE_3WL,PIPE_BL,PIP E_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM);
private var row8_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_B L,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_3WR,PIPE_DUM,PIPE_DUM,PIPE_3WL);
private var row9_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_B L,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM);
private var row10_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_3WR,PIPE_L,PIPE_L,PIPE_4W,PIPE_L,PIPE_L,PIP E_4W,PIPE_L,PIPE_L,PIPE_3WL,PIPE_BL,PIPE_BL,PIPE_BTM);
private var row11_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_B L,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM);
private var row12_array:Array=new Array(PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_B L,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM,PIPE_BL,PIPE_BL,PIPE_BTM);
private var pipes_array:Array = new Array(row1_array,row2_array,row3_array,row4_array,row5_array,row6_array,row7_ar ray,row8_array,row9_array,row10_array,row11_array,row12_array);
private var flow_order_array:Array = new Array(row1_array[0],row2_array[0],row3_array[0],row4_array[0],row4_array[1],row 4_array[2],row4_array[3],row5_array[3],row6_array[3],row7_array[3],row8_array[3 ] ,row9_array[3],row10_array[3],row11_array[3],row12_array[3]);
public function Tiles():void {
drawRow(pipes_array);
}
public function drawRow(row_array:Array):void {
for (var i:Number = 0; i< row_array.length; i++) {
var tiles_row_array:Array = new Array();
for (var j:Number = 0; j< row_array*.length; j++) {
var tile:MovieClip;
switch (row_array*[j]) {
case PIPE_BTM :
tile = new bottomTile();
break;
case PIPE_BL :
tile = new blankTile();
break;
case PIPE_3WR :
tile = new threeWayRightTile();
break;
case PIPE_DUM :
tile = new DummyTile();
break;
case PIPE_4W :
tile = new fourWayTile();
break;
case PIPE_3WL :
tile = new ThreeWayLeftTile();
break;
case PIPE_TR :
tile = new TurnRightTile();
break;
case PIPE_R :
tile = new rightTile();
break;
case PIPE_L :
tile = new leftTile();
break;
case PIPE_TL :
tile = new turnLeftTile();
break;
}
tile.x = STARTX+j*TILE_SIZE;
tile.y = STARTY+i*TILE_SIZE;
addChild(tile);
tiles_row_array.push(tile);
tile.addEventListener(MouseEvent.CLICK, onclick);
}
tiles_array.push(tiles_row_array);
}
}
public function flow():void {
if(!isFlowing) {
segment = flow_order_array[0];
segment.play();
isFlowing = true;
}
if(isFlowing && (segment.currentFrame == segment.totalFrame)) {
segment = tiles_array[flow_order_array];
isFlowing = false;
}
}
private function onclick(evt:MouseEvent):void {
evt.target.play();
}
}
It looks a lot,but It’s quite simple. I just make the map row by row and then put them in another array.
Then while for the water flowing for each button to the cup, I put them in another array called flow_order_array. I make one only just to test if my code works or not. Since I’m still trying to figure it out how to make it works.
The problem now is,when I play my code, it says that there is a null object.
This is the code that I used to import the Tiles.as
import Tiles;
var tiles:Tiles = new Tiles();
sugar_btn.addEventListener(MouseEvent.CLICK, playButtons);
function playButtons(evt:MouseEvent):void {
updateFlow();
}
function updateFlow():void {
tiles.flow();
}
And the error I get is
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Tiles/flow()
at game10_fla::MainTimeline/updateFlow()
at game10_fla::MainTimeline/playButtons()
I tried to debug it,but it didnt show which part of the code that is the null object.
Can you please take a look and point me a direction how to solve this?
I am new with as3 so class file is totally a new thing for me.