..:: MX Studio Fóruns ::..: Jogo da Nave - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Jogo da Nave Projeto em fase inicial...

#1 User is offline   Sérgio Toledo 

  • Group: Membros
  • Posts: 6
  • Joined: 21-November 09

  Posted 11 December 2009 - 12:10 AM

Olá a todos.

Estou postando o começo deste jogo que, sendo o primeiro, está me servindo de lição e tirando minhas noites de sono... rsrsrsrs, mas também me dando muita alegria.

Por enquanto a nave apenas se movimenta e atira com o CTRL smile.gif

Não sei se o código está o mais enxuto ou se haveriam meios melhores (o que com certeza há) de escrevê-lo, e peço que os que puderem, colaborem.

Gostaria de receber criticas, dicas, palpites e todos comentários que possam servir para esclarecimento e soma de conhecimento para todos.

Obrigado a todos.


Arquivo SWF


Arquivo FLA



CÓDIGO
var velocidadex = 0;
var velocidadey = 0;
var energia = 5;
var atrito = 0.7;

nave.onEnterFrame=function(){
    nave.gotoAndStop(1);
    
    if(nave._x < 50){nave._x = 50;} //Estipula os limites da nave no palco.
    if(nave._x > 550){nave._x = 550;}
    if(nave._y < 50){nave._y = 50;}
    if(nave._y > 750){nave._y = 750;}    
    
    if(Key.isDown(Key.CONTROL)){atira();} //Chama a função atira().
    
    if(Key.isDown(Key.LEFT) ){velocidadex -= energia; nave.gotoAndStop(2);} //Movimento da nave
    if(Key.isDown(Key.RIGHT) ){velocidadex += energia; nave.gotoAndStop(3);}
    if(Key.isDown(Key.UP) ){velocidadey -= energia;}
    if(Key.isDown(Key.DOWN) ){velocidadey += energia;}
    
    velocidadex *= atrito;
    velocidadey *= atrito;
    nave._x += velocidadex;
    nave._y += velocidadey;        
};

function atira(){    
    var tiro:MovieClip = _root.attachMovie("tiro", "tiro" + _root.getNextHighestDepth(), _root.getNextHighestDepth());
    tiro._x = nave._x;
    tiro._y = nave._y - 35;        
    tiro.onEnterFrame = function(){
        tiro._y -= 30;
        if(tiro._y < 0){tiro.removeMovieClip();}
    };
};

droide.onEnterFrame = function(){
    droide._x = nave._x;
    droide._y = nave._y;
    droide._rotation += 10;
}

droide2.onEnterFrame = function(){
    droide2._x = nave._x;
    droide2._y = nave._y;
    droide2._rotation -= 10;
}

0

#2 User is offline   Sérgio Toledo 

  • Group: Membros
  • Posts: 6
  • Joined: 21-November 09

Posted 15 December 2009 - 08:28 PM

Beleza pessoal, agora estou passando esse jogo para AS3 (decidi aprender logo o 3 que é mais negócio... rsrsrs), e gostaria de tirar algumas dúvidas com vocês (já que ninguém comentou o post... sad.gif ) hehehe, brincadeirinha...

Vamos aos problemas e dúvidas:

1- Não consigo fazer atirar, tentei de diversas formas criando uma função expecífica pra isso e também incluindo o código dentro da função principal "jogo" e as que não deram erro, não sairam como o esperado.

2- Um Bug, a movimentação funciona normalmente, mas se você pressionar as setas e o ctrl "que nem loco" a nave acaba travando em uma direção.

3- O escopo do programa está adequado, ou deveria ter declarado classes, packages, e outros?

Bom, segue o código e o FLA. Abração.


Arquivo FLA em AS3

CÓDIGO
/*===================== Sérgio Toledo - 14/12/2009 ====================*/

//Cria a instância dos objetos
var jogador:Nave = new Nave();
var tiro:Tiro = new Tiro();
var droide1:Droide = new Droide();
var droide2:Droide = new Droide();

//Cria as variáveis de movimento
var velocidadex:Number = new Number(0);
var velocidadey:Number = new Number(0);
var energia:Number = new Number(5);
var atrito:Number = new Number(0.7);

//Cria as variáveis de direção
var cima:Boolean = new Boolean(false);
var baixo:Boolean = new Boolean(false);
var esquerda:Boolean = new Boolean(false);
var direita:Boolean = new Boolean(false);

//Cria a variável de de tiro
var atira:Boolean = new Boolean(false);

/*============================================================*/
//Posiciona o jogador no palco
jogador.x = stage.stageWidth / 2;
jogador.y = stage.stageHeight - 50;

//Pára a animação de movimento lateral do jogador
jogador.gotoAndStop(1);

//Adiciona os objetos no palco
stage.addChild(jogador);
stage.addChild(droide1);
stage.addChild(droide2);

/*============================================================*/
//Eventos
stage.addEventListener(KeyboardEvent.KEY_DOWN, pressionou);
stage.addEventListener(KeyboardEvent.KEY_UP, soltou);
stage.addEventListener(Event.ENTER_FRAME, mover);
stage.addEventListener(Event.ENTER_FRAME, jogo);
stage.addEventListener(Event.ENTER_FRAME, atirar);

/*============================================================*/
//Função para tecla precionada
function pressionou(e:KeyboardEvent):void {
    if (e.keyCode == Keyboard.UP) {
        cima = true;
    }
    if (e.keyCode == Keyboard.DOWN) {
        baixo = true;
    }
    if (e.keyCode == Keyboard.LEFT) {
        esquerda = true;
        jogador.gotoAndStop(2);
    }
    if (e.keyCode == Keyboard.RIGHT) {
        direita = true;
        jogador.gotoAndStop(3);
    }
    if (e.keyCode == Keyboard.CONTROL) {
        atira = true;
    }
}

/*============================================================*/
//Função para tecla solta
function soltou(e:KeyboardEvent):void {
    if (e.keyCode == Keyboard.UP) {
        cima = false;
    }
    if (e.keyCode == Keyboard.DOWN) {
        baixo = false;
    }
    if (e.keyCode == Keyboard.LEFT) {
        esquerda = false;
        jogador.gotoAndStop(1);
    }
    if (e.keyCode == Keyboard.RIGHT) {
        direita = false;
        jogador.gotoAndStop(1);
    }
    if (e.keyCode == Keyboard.CONTROL) {
        atira = false;
    }
}

/*============================================================*/
//Função para movimento do jogador
function mover(e:Event):void {
    if (cima == true) {
        velocidadey -= energia;//A velocidade aumenta acrecida pela energia
    }
    if (baixo==true) {
        velocidadey+=energia;
    }
    if (esquerda==true) {
        velocidadex-=energia;
    }
    if (direita==true) {
        velocidadex+=energia;
    }
}

/*============================================================*/
//Função para atirar (não funciona direito)
function atirar(e:Event):void {
    if (atira==true) {
        stage.addChild(tiro);
        tiro.x=jogador.x;
        tiro.y=jogador.y-35;
        if (tiro.y>0) {
            tiro.y-=30;
        }
    }
}

/*============================================================*/
//Função principal (Loop)
function jogo(e:Event):void {
    velocidadex*=atrito;// velocidade é diminuida pelo atrito
    velocidadey*=atrito;

    //Adicionado velocidade à posição do jogador (movimento)
    jogador.x+=velocidadex;
    jogador.y+=velocidadey;

    //Define os limites da tela
    if (jogador.x<30) {
        jogador.x=30;
    }
    if (jogador.x>570) {
        jogador.x=570;
    }
    if (jogador.y<30) {
        jogador.y=30;
    }
    if (jogador.y>770) {
        jogador.y=770;
    }

    //Posiciona o droide de acordo com jogador
    droide1.x=droide2.x=jogador.x;
    droide1.y=droide2.y=jogador.y;

    // Movimento de translação do droide
    droide1.rotation+=10;
    droide2.rotation-=10;
}

/*============================================================*/

0

#3 User is offline   Maycon Marques 

  • Group: Membros
  • Posts: 276
  • Joined: 25-July 07

Posted 19 December 2009 - 10:30 AM

Que eu saiba tem que classificar as funções com private ou public.
0

#4 User is offline   Sérgio Toledo 

  • Group: Membros
  • Posts: 6
  • Joined: 21-November 09

Posted 27 December 2009 - 11:43 PM

Olá pessoal, com mais algumas fuçadas na internet acabei deixando o código um pouco melhorado, corrigi o Bug e agora está atirando.

Realmente Maycon, mas só quando usamos "packages", aí vai o jogo melhorado, desta vez criei um arquivo .as externo contendo todo o código (e não colocando em um layer separado como antes).

Jogo da Nave
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic



Publicidade




1 User(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)