quarta-feira, 30 de abril de 2014

Protótipo de Adventure Game

Muito legal o sistema de colisão codado pelo Mike Chambers!
Em cima dele dá  pra montar um game estilo Adventure!!



// MAZE GAME ENGINE
// Mod of Mike Chambers code
// www.mikechambers.com/blog/2009/06/24/using-bitmapdata-hittest-for-collision-detection/

   stop();
   var colide:Boolean = false;
   stage.focus = stage;

// POSICAO INICIAL JOGADOR

   player.x = 130;
   player.y = 70;

// MAPEIA COLISOES MAPA
 
function game(){
    var playerRect:Rectangle = player.getBounds(this);
    var playerOffset:Matrix = player.transform.matrix;
    playerOffset.tx = player.x - playerRect.x;
    playerOffset.ty = player.y - playerRect.y;  
    var playerBmpData = new BitmapData(playerRect.width, playerRect.height, true, 0);
    playerBmpData.draw(player, playerOffset);  
    var mazeRect:Rectangle = maze.getBounds(this);
    var mazeBmpData = new BitmapData(mazeRect.width, mazeRect.height, true, 0);
    var mazeOffset:Matrix = maze.transform.matrix;
    mazeOffset.tx = maze.x - mazeRect.x;
    mazeOffset.ty = maze.y - mazeRect.y;
    mazeBmpData.draw(maze, mazeOffset);  
    var rLoc:Point = new Point(mazeRect.x, mazeRect.y);
    var bLoc:Point = new Point(playerRect.x, playerRect.y);

// COLISAO
    if(mazeBmpData.hitTest(rLoc, 255, playerBmpData, bLoc, 255))   {
        colide = true;
 }

    else    {
    colide = false;
    }

    playerBmpData.dispose();
    mazeBmpData.dispose();
}

// MOVIMENTAÇÃO

var upPressed:Boolean = false;
var downPressed:Boolean = false;
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;

player.addEventListener(Event.ENTER_FRAME, Iniciar);
stage.addEventListener(KeyboardEvent.KEY_DOWN, SetKeyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, UnsetKeyPressed);

function Iniciar (event:Event){

// FILTROS
   maze.filters = [new BevelFilter()];
   chave.filters = [new DropShadowFilter()];
   coin.filters = [new DropShadowFilter()];
   //player.filters = [new DropShadowFilter()];

// COLISOES NPC

// CHAVE
if (player.hitTestObject(chave)){
trace ("PEGOU A CHAVE!!!");
chave.gotoAndStop(2);
}

// MOEDA
if (player.hitTestObject(coin)){
trace ("PEGOU A MOEDA!!");
coin.gotoAndStop(2);
}

// ENEMY

function game_over(){
stage.removeEventListener(Event.ENTER_FRAME, Iniciar);
player.removeEventListener(Event.ENTER_FRAME, Iniciar);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, SetKeyPressed);
stage.removeEventListener(KeyboardEvent.KEY_UP, UnsetKeyPressed);
nextScene();
}

if (player.hitTestObject(enemy_mc)){
trace ("YOU DIE");
game_over();
}

// PORTAL 01
if (player.hitTestObject(portal)){
trace ("MUDANDO DE SALA!");
portal.gotoAndStop(2); // play sound
gotoAndStop(2);

player.x = 68; // POSICAO NOVA JOGADOR
player.y = 535;
}

// SETA PRA CIMA
if (upPressed) {
player.y -= 5;
game();
if (colide){
player.y += 10;
}
}
// SETA PRA BAIXO
if (downPressed) {
player.y += 5;
game();
if (colide){
player.y -= 10;
}
}

// SETA ESQUERDA
if (leftPressed) {
player.x -= 5;
game();
if (colide){
player.x += 10;
}
}

// SETA DIREITA
if (rightPressed) {
player.x += 5;
game();
if (colide){
player.x -= 10;
}
}
}

function SetKeyPressed(event:KeyboardEvent):void{
switch (event.keyCode) {
case Keyboard.UP: {
upPressed = true;
break; }
case Keyboard.DOWN: {
downPressed = true;
break; }
case Keyboard.LEFT: {
leftPressed = true;
break; }
case Keyboard.RIGHT: {
rightPressed = true;
break; }
}
}

function UnsetKeyPressed(event:KeyboardEvent):void{
switch (event.keyCode) {
case Keyboard.UP: {
upPressed = false;
break; }
case Keyboard.DOWN: {
downPressed = false;
break; }
case Keyboard.LEFT: {
leftPressed = false;
break; }
case Keyboard.RIGHT: {
rightPressed = false;
break; }
}
}

Nenhum comentário:

Postar um comentário