A Flash Developer Resource Site

Results 1 to 20 of 23

Thread: Multi Array + Collision

Threaded View

  1. #1
    Junior Member
    Join Date
    May 2011
    Posts
    14

    Multi Array + Collision

    I am making this maze game as a uni project, unforgivable I am a bit lost when it come to actionscript 3.

    i have attached a picture of the game.

    What i am trying to figure out is how do I get the koala to detect when it touches the TNT or the Exit MCs ?

    here is my code.
    Code:
    //{ region === initialisation
    
    const MAP_WIDTH = 16
    const MAP_HEIGHT = 11
    const TILE_WIDTH = 40
    restart_btn.visible = false;
    rescued_mc.visible = false;
    var map:Array = [
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
    [1, 5, 6, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 1], 
    [1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1], 
    [1, 5, 1, 0, 1, 7, 0, 0, 0, 6, 0, 1, 0, 1, 0, 1], 
    [1, 0, 1, 0, 1, 6, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1], 
    [1, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1], 
    [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1], 
    [1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1], 
    [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1], 
    [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    ]
    
    var LEFT, RIGHT, UP, DOWN:Boolean = false;
    var koalas:Array = new Array()
    var TNTs:Array = new Array()
    
    
    
    var displayMap:Array = new Array();
    
    for (var row = 0; row < MAP_HEIGHT; row++){
    	displayMap[row] = new Array();
    	for (var col = 0; col < MAP_WIDTH; col++){
    		var tile:Tile = new Tile();
    		displayMap[row][col] = tile;
    		tile.x = TILE_WIDTH / 2 + (col) * TILE_WIDTH;
    		tile.y = TILE_WIDTH / 2 + (row + 1) * TILE_WIDTH;
    		tile.visible = false;
    		addChild(tile);
    		tile.gotoAndStop(1);
    		switch (map[row][col]){
    			case 1: 
    				tile.gotoAndStop(2);
    			break;
    			case 5: 
    				var myKoala_mc:Koala = new Koala();
    				addChild(myKoala_mc);
    				myKoala_mc.addEventListener(Event.ENTER_FRAME, moveKoala);
    				myKoala_mc.x = TILE_WIDTH / 2 + (col) * TILE_WIDTH;
    				myKoala_mc.y = TILE_WIDTH / 2 + (row + 1) * TILE_WIDTH;
    				myKoala_mc.visible = false;
    				myKoala_mc.row = row;
    				myKoala_mc.col = col;
    				koalas.push(myKoala_mc)
    			break;
    			case 6:
    			var TNT_mc:TNT = new TNT();
    				addChild(TNT_mc);
    				TNT_mc.x = TILE_WIDTH / 2 + (col) * TILE_WIDTH;
    				TNT_mc.y = TILE_WIDTH / 2 + (row + 1) * TILE_WIDTH;
    				TNT_mc.visible = false;
    				TNT_mc.row = row;
    				TNT_mc.col = col;
    				TNTs.push(TNT_mc)
    			break;
    			case 7:
    			var exit_one:exit1 = new exit1();
    				addChild(exit_one);
    				exit_one.x = TILE_WIDTH / 2 + (col) * TILE_WIDTH;
    				exit_one.y = TILE_WIDTH / 2 + (row + 1) * TILE_WIDTH;
    				exit_one.visible = false;
    				exit_one.row = row;
    				exit_one.col = col;
    			break;
    		}
    	}
    }
    setChildIndex(myKoala_mc, numChildren - 1);
    //} endregion initialisation ====
    // other listeners==================
    splash_mc.start_btn.addEventListener(MouseEvent.CLICK, startGame);
    restart_btn.addEventListener(MouseEvent.CLICK, reStartGame);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
    stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
    
    // Event Handlers===================
    function startGame(m:MouseEvent){
    	splash_mc.visible = false;
    	for (var row = 0; row < MAP_HEIGHT; row++){
    		for (var col = 0; col < MAP_WIDTH; col++){
    			displayMap[row][col].visible = true;
    		}
    	}
    	
    	for each (var bear in koalas) {
    		bear.visible = true;
    			for each (var deer in TNTs) {
    				deer.visible = true;
    			}
    	}
    	restart_btn.visible = true;
    	exit_one.visible = true;
    	rescued_mc.visible = true;
    }
    
    
    function reStartGame(m:MouseEvent){
    	splash_mc.visible = true;
    	for (var row = 0; row < MAP_HEIGHT; row++){
    		for (var col = 0; col < MAP_WIDTH; col++){
    			displayMap[row][col].visible = false;
    		}
    	}
    	for each (var bear in koalas) {
    		bear.visible = false;
    			for each (var deer in TNTs) {
    				deer.visible = false;
    			}
    	}
    	myKoala_mc.visible = false;
    	restart_btn.visible = false;
    	TNT_mc.visible = false;
    	exit_one.visible = false;
    	rescued_mc.visible = false;
    }
    
    //{ region moving koala
    const DIR_RIGHT = 1;
    const DIR_LEFT = -1;
    const DIR_UP = -1;
    const DIR_DOWN = 1;
    
    function moveKoala(evt:Event){
    	var temp = evt.currentTarget as Koala;
    	with (temp){
    		if (LEFT && canMoveX(temp, DIR_LEFT)){
    			moveX(temp, DIR_LEFT);
    		} else if (RIGHT && canMoveX(temp, DIR_RIGHT)){
    			moveX(temp, DIR_RIGHT);
    		} else if (UP && canMoveY(temp, DIR_UP)){
    			moveY(temp, DIR_UP);
    		} else if (DOWN && canMoveY(temp, DIR_DOWN)){
    			moveY(temp, DIR_DOWN);
    		} else {
    			gotoAndStop("stand");
    		}
    	}
    }
    
    function canMoveX(aKoala, aDirection):Boolean {
    	
    	var canMove:Boolean;
    	
    	if (map[aKoala.row][aKoala.col + aDirection] == 6 || map[aKoala.row][aKoala.col + aDirection] == 7|| map[aKoala.row][aKoala.col + aDirection] == 0)
      {
        return true;
      }
      	else return false;
    }
    
    function moveX(aKoala, aDirection){
    	with (aKoala){
    		if (aDirection == DIR_LEFT) gotoAndStop("left");
    		else gotoAndStop("right");
    		map[row][col] = 0;
    		displayMap[row][col].gotoAndStop(1);
    		col = col +aDirection;
    		map[row][col] = 5;
    		x = (col + 0.5) * TILE_WIDTH;
    	}
    }
    
    function canMoveY(aKoala, aDirection):Boolean {
    	
    	var canMove:Boolean;
    	
    	if (map[aKoala.row + aDirection][aKoala.col ] == 6 || map[aKoala.row + aDirection][aKoala.col ] == 7 || map[aKoala.row+ aDirection][aKoala.col ] == 0)
      {
        return true;
      }
      	else return false;
    }
    
    function moveY(aKoala, aDirection){
    	with (aKoala){
    		if (aDirection == DIR_UP) gotoAndStop("up");
    		else gotoAndStop("down");
    		map[row][col] = 0;
    		displayMap[row][col].gotoAndStop(1);
    		row = row + aDirection;
    		map[row][col] = 5;
    		y = (row + 1.5) * TILE_WIDTH;
    	}
    }
    
    //} endregion
    
    function keyDownHandler(k:KeyboardEvent){
    	var key = k.keyCode;
    	switch (key){
    		case Keyboard.LEFT: 
    			LEFT = true;
    			break;
    		case Keyboard.RIGHT: 
    			RIGHT = true;
    			break;
    		case Keyboard.UP: 
    			UP = true;
    			break;
    		case Keyboard.DOWN: 
    			DOWN = true;
    			break;
    	}
    }
    
    function keyUpHandler(k:KeyboardEvent){
    	var key = k.keyCode;
    	switch (key){
    		case Keyboard.LEFT: 
    			LEFT = false;
    			break;
    		case Keyboard.RIGHT: 
    			RIGHT = false;
    			break;
    		case Keyboard.UP: 
    			UP = false;
    			break;
    		case Keyboard.DOWN: 
    			DOWN = false;
    			break;
    	}
    }
    Any help would be appreciated, thank you.
    Attached Images Attached Images

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center