..:: MX Studio Fóruns ::..: Para todos q perguntam sobre gravidade - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




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

Para todos q perguntam sobre gravidade vou ensinar simular gravidade, movimentos, tudo parecido com sonic e m

#1 User is offline   Rodrigo Augusto Alves Dias 

  • Group: Membros
  • Posts: 38
  • Joined: 07-September 06

Posted 29 July 2007 - 04:45 PM

Hello!!
Eu vou postar aqui uma breve ajuda q poderá ser d muita utilidade a todos!! gravidade, colisão perfeita e limites!!Eu utilizo flash 8 mas em versõs do MX pra cima funciona(Naum sei em CS3, pois ainda nao tenho)

crie um personagem de sua autoria ou pode fazer o mário ou o sonic, vc q sabe. Desenhe-o parado na tela. Selecione-o e aperte F8 e converta-o em movieclip, coloque o registration dele no canto inferior(pode ser esquerdo meio ou direito, eu aconselho o canto inferior do meio)
dê o nome de sua preferência) e aperte ok.
abra o movieclip personagem e aperte f6 para inserir um novo quadro q será o de andar. clique no desenho parado e o converta em movieclip e de o nome de andar!(aqui o registration naum tem importancia pode ser qualquer um)
faça a animação dele andando. Volte ao movie clip principal(personagem) e insira um novo quadro chave e agora faça uma animação de pular ou somente um desenho.
no movieclip personagem crie uma nova layer e chame de máscara. Desenhe um retângulo do tamanho de seu movie clip e converta-o em movie clip de máscara. dê o instance name dele de mascara(obs: Não é uma layer mascara e sim um movieclip)

Agora volte a cena principal.
Seu movieclip personagem estará na tela. instancie-o de player_mc.

crie agora uma plataforma retangular(retÂngulo) e converta-a em movie clip coloque o registration dela no canto superior(tanto faz esquerdo meio ou direito, só deve ser superior)

coloque a instance name de chao_mc0
agora na cena 1 insira uma nova layer e chame-a de actions
insira as seguintes ações
CODE
//variáveis do jogo
velAndar = 0;
vforce = 25;
horizontall = 0;
vertical = 2.8;
gravidade = .8;
accel = 1.2;
pulando = false;
caindo = true;
platform = null;
// Aqui coloca-se a função para se parar a gravidade quando encostada no chao
function tocarChaos() {
    var i, yy, xx;
    // um for para verificar quantos chãos há no jogo e seu limite
    for (i=0; i<100; i++) {
        //definimos uma variável que substitui todos os chãos da tela
        platform = eval("_root.chao_mc"+i);
        //Outras variávei q são mais em relação a posição do player
        yy = player_mc._y+vertical;
        xx = player_mc._x+horizontall;
        //condição para parar a gravidade
        if (player_mc._y<platform._y && yy>=platform._y && platform.hitTest(xx, platform._y) == true) {
            //Essa linha é importante saber para a gravidade funcionar
            // a plataforma deve estar no stage não pode estar em um
            //movie clip q vc instanciar de fase!!
            player_mc._y = platform._y;
            //O
            caindo = false;
            vertical = 0;
            return;
        }
    }
    //o platform = null serve para dizer se o personagem está ou não encostado no chão
    platform = null;
    return;
}
//
//aqui entra toda a gravidade
function jogo() {
    // pressionar a tecla para pular e verificar se já não está pulando
    //para não pular novamente, por isso a necessidade do vertical = 0
    if (vertical == 0 && Key.isDown(Key.SPACE) == true && lock) {
        vertical = vforce*-1.30;
        platform = null;
        pulando = true;
    }
    // se o personagem estiver pulando                                                                                                                                                                                                      
    if (pulando == true) {
        player_mc.gotoAndStop(3);
        //o quadro em que estã a animação do player pulando
        vertical = vertical*gravity;
        //Aqui um cálculo matemático para desaceleração do pulo
        //Condição para ver se o pulo está fraco se sim eu estarei caindo
        if (Math.abs(vertical)<2) {
            // O Math.abs pega o valor absoluto semarredondamento
            vertical = Math.abs(vertical);
            //Então eu caio
            caindo = true;
            pulando = false;
        }
    }
    // Se eu estiver caindo                                                                                                                                                                                                          
    if (caindo == true) {
        player_mc.gotoAndStop(3);
        //chama a função para parar a gravidade se encostar no chao
        tocarChaos();
        //acelera a caída
        vertical = vertical*accel;
        //Condição para o valor da gravidade não ficar muito alto
        if (Math.abs(vertical)>=20) {
            vertical = 20;
        }
    }
    //                                                                                                                                                                                                          
    //Condição que verifica se o player está no chao, senão ele estará caindo
    if (platform != null && player_mc.hitTest(platform) == false) {
        vertical = 2.8;
        caindo = true;
    }
    //Fazer o player cair na velocidade da gravidade(pular também)  
    player_mc._y += vertical;
}
//Fazer o player se movimentar
player_mc.onEnterFrame = function() {
    //Fazera mascara q colocamos ficar invisível
    this.mascara._visible = false
    //chamamos a função do jogo
    jogo();
    //Agora vamos definir os movimentos
    velAndar = 0;
    //Colocamos velAndar = 0 para quando não estivermos apertando nenhuma tecla
    // a velocidade ficar zero
    //Aqui fazemos o player andar na velocidade de andar
    this._x += velAndar;
    //Quando pressionarmos determinadas teclas
    //se pressionarmos a tecla direita
    if (Key.isDown(Key.RIGHT)) {
        //velocidade andar fica 10 positivo para o player andar para a direita
        velandar = 10;
        //Fazer o personagem andar
        this.gotoAndStop(2);
        //Aqui fazemos o personagem virar para a direita
        this._xscale = 100;
        //se pressionar a tecla esquerda
    } else if (Key.isDown(Key.LEFT)) {
        //Velocidade fica negativa para ele ir para a esquerda
        velAndar = -10;
        //Fazer andar e virar para a esquerda
        this.gotoAndStop(2);
        this._xscale = -100;
    } else {
        //Se nenhuma dessas teclas for pressinadas eu fico parado
        this.gotoAndStop(1);
    }
};

agora faremos com que se ele tocar a parede pare de andar
Então desenhe um retângulo para uma parede e converta-o em moviecli(f8) dê o nome de parede(ou qualquer utro nome)
abra o movieclip parede e crie uma nova layer e nomeie-a de ações
coloque o seguinte código
CODE
this.onEnterFrame = function(){
    //se a parede encostar no player
    if(this.hitTest(_root.player_mc)){
        //Aqui colocamos _root nates para identificar o nível da variável
        _root.velAndar = 0
    }
}

agora é só testar o filme(ctrl+enter)

a partir dessa base podemos construir va´rios jogos usando a imaginação
para ocenário é desenhá-lo e colcar no código para as plataformas ficarem invisíveis assim como as paredes e ir colocando os chãos e instanciando-os de chao_mc1, chao_mc2, choa_mc3 e eassim por diante.

bom aí eu coloco um jogo que estou fazendo de minha autoria, mas só tem a primeira fase. use a barra de espaço para pular as setas para mover e a seta de baixo para ele rolar, aperte enter para dar pause.

meu jogo

espero ter ajudado e até mais
0

#2 User is offline   huili 

  • Group: Membros
  • Posts: 53
  • Joined: 26-July 07

Posted 29 July 2007 - 05:18 PM

cara muito bom... me ajudou muito a entender um pouco mais os códigos action script... cara agora um a pergunta... tem uma parte do jogo que o personagem pula e segura numa barra e segue dependurado... qual eh o código p/ fazer aquilo... mais uma vez belo tuto... parabens thumbup.gif
0

#3 User is offline   NinoSPFC 

  • Group: Membros
  • Posts: 338
  • Joined: 21-September 05

Posted 29 July 2007 - 06:46 PM

Muito bom!
0

#4 User is offline   Rafael lima da rocha 

  • Group: Membros
  • Posts: 32
  • Joined: 17-February 07

Posted 29 July 2007 - 08:24 PM

Legal! ^.^
Só tem um porem...
Você estar movimentando o personagem junto com o cenário
causando uma certa lentidão no game...

Você poderia colocar um "limite" para que o cenário comece a se mover.
Exemplo:

Quando o personagem chega-se em uma determinada parte do plano cartesiano X
o scroling do cenário começa-se a passar.

Veja um exemplo de uma engine que estou fazendo para testar em outros projetos.

**estou usando esses gráficos apenas para testes de viabilidade.

Repare no scroling do cenário ele só acontece quando chegamos em uma determinada parte do plano cartesiano X
^.^
0

#5 User is offline   Rodrigo Augusto Alves Dias 

  • Group: Membros
  • Posts: 38
  • Joined: 07-September 06

Posted 29 July 2007 - 10:59 PM

QUOTE(Rafael lima da rocha @ 29/7/2007 19:07:41) View Post
Legal! ^.^
Só tem um porem...
Você estar movimentando o personagem junto com o cenário
causando uma certa lentidão no game...

Você poderia colocar um "limite" para que o cenário comece a se mover.
Exemplo:

Quando o personagem chega-se em uma determinada parte do plano cartesiano X
o scroling do cenário começa-se a passar.

Veja um exemplo de uma engine que estou fazendo para testar em outros projetos.

**estou usando esses gráficos apenas para testes de viabilidade.

Repare no scroling do cenário ele só acontece quando chegamos em uma determinada parte do plano cartesiano X
^.^

é mas mesmo assim ainda fica lento, eu já testei, não sei como resolver esse problema cara!!
se vc tiver alguma coisa q ajude escreve aí q eu vou tentar colocar no meu jogo
0

#6 User is offline   Márcio Silva 

  • Group: Colunistas
  • Posts: 79
  • Joined: 28-March 07

Posted 30 July 2007 - 12:12 AM

Olá pessoal da comunidade,

Eu publiquei recentemente dois artigos que abordam esses assuntos que vocês comentam.

Criação de games - Megaman Parte 1

Criação de games - Megaman Parte 2

Quanto ao problema da lentidão, é resolvido em adequar a quantidade fps com a variével que armazena a aceleração, no exemplo apresentado, pode ser abservado que a velocidade de scrolling não está adequada com sua variável que armazena a aceleração, nos meus artigos coloquei uma baixa taxa d4 frames mas que está de acordo com a aceleração que aplico tanto ao cenário quanto ao personagem.


Espero ter ajudado.

flw
0

#7 User is offline   Rodrigo Augusto Alves Dias 

  • Group: Membros
  • Posts: 38
  • Joined: 07-September 06

Posted 30 July 2007 - 02:36 PM

QUOTE(Márcio Silva @ 29/7/2007 23:07:11) View Post
Olá pessoal da comunidade,

Eu publiquei recentemente dois artigos que abordam esses assuntos que vocês comentam.

Criação de games - Megaman Parte 1

Criação de games - Megaman Parte 2

Quanto ao problema da lentidão, é resolvido em adequar a quantidade fps com a variével que armazena a aceleração, no exemplo apresentado, pode ser abservado que a velocidade de scrolling não está adequada com sua variável que armazena a aceleração, nos meus artigos coloquei uma baixa taxa d4 frames mas que está de acordo com a aceleração que aplico tanto ao cenário quanto ao personagem.


Espero ter ajudado.

flw

Eu coloquei o fps de 30 e a aceleração como 10, qual fps vc recomenda q eu ponha para o jogo nao ficar lento?

0

#8 User is offline   Márcio Silva 

  • Group: Colunistas
  • Posts: 79
  • Joined: 28-March 07

Posted 31 July 2007 - 03:18 PM

Bem, digo pra vc que não existe a fórmula mágica pra se saber qual a quantidade de frames ideal, só com testes mesmo, mas geralmete uso antre 25 e 30 fps pra ficar numa velocidade legal. Uma boa comparação é verificar qual a velocidade do jogo real, tentar o mais próximo possível.


flw.

0

#9 User is offline   Rafael lima da rocha 

  • Group: Membros
  • Posts: 32
  • Joined: 17-February 07

  Posted 31 July 2007 - 04:51 PM

Certa vez eu criei até um componente para verificar a taxa de frame rate rolleyes.gif

Deixa eu ti mostrar aqui como você vai verificar a taxa de FPS.
Lembrando a taxa de Frame por segundo no navegador é muito diferente da taxa atual do SWF (fora do navegador)
para você testar um FPS em tempo real faça o seguinte código abaixo:


CODE
// primeiro crie um campo de texto dinâmico e no campo VAR coloque "taxaFPS" (sem aspas)

_root.createEmptyMovieClip("mostrarFrameRate",100);
mostrarFrameRate.onEnterFrame = function() {
tempo = getTimer();
frameRate = Math.round(1000 / (tempo - obj));
obj = tempo;
taxaFPS = frameRate

}



Pronto vai aparecer na tela a taxa de frame em tempo real.
Caso não consiga fazer eu lhe mando o meu componente que fiz a um tempo atraz só pra isso.
Espero ter ajudado thumbsup.gif

0

#10 User is offline   Márcio Silva 

  • Group: Colunistas
  • Posts: 79
  • Joined: 28-March 07

Posted 31 July 2007 - 05:22 PM

Vlw pela sua contribuição Rafael.


No entanto o nosso problema maior é saber a melhor taxa para um determinado jogo e para uma determinada aceleração do personagem.

São 3 grandes variáveis para o problema, a solução mesmo é testar até achar o melhor fps juntamente com a aceleração. Se soubermos de antemão a aceleração sua fórmula dá uma enorme ajuda.


flw
0

#11 User is offline   Rafael lima da rocha 

  • Group: Membros
  • Posts: 32
  • Joined: 17-February 07

Posted 31 July 2007 - 07:01 PM

Olha nos jogos de aventura eu costumo colocar entre 18 a 24 FPS...
Isso quando eu não quero jogar no Navegador.

Quando eu coloco o game no navegador ai eu deixo entre 30 e 35
Mas depende muito do que o game ta fazendo...

Exemplo: Se tiver muitos MCs que se movimentem conforme algum listener ou evento de teclado ou mouse
ai consertesa vai pesar bastante no rendimento final do game...

Eu recomendo que você não movimente muitos movieClipes conforme o pressionar de um dispositivo de entrada.
No meu jogo abaixo eu crio uma função para cada ação.
Isso tem me ajudado muito alem de controlar todos os eventos
do código para organização e otimização do projeto.

Quando eu falo em criar uma função para cada ação eu quero dizer o seguinte...
Vejamos, eu crio uma função para Movimentos outra Scrolling outra para Pontuações outra para
Colisões, outra para Checar quando o inimigo morre outra para Checar
quando o Player morre e por ai vai.

E cada função tem um MovieClipe controlador.
Pois assim fica mais simples na hora de deletar o evento dessa função.
Nisso você não precisa deletar a função basta deletar o evento que chama ela
assim vc pode criar um outro evento para chama-la novamente. ^.^

Você também pode trabalhar com funções literárias fica melhor e ainda bem mais simples
na hora de remover um evento. Pois economiza processamento e agiliza o FPS ^.^

No game do amigo acima eu vi apenas 3 funções.
Duas funções Standarts (jogo e tocarChaos) e uma literária (onEnterFrame)
Deixar apenas uma "função" controlar quase todo o game, exige muito processamento e o frameRate tende a cair realmente.


Mas a casos que precisamos ficar testando o tempo inteiro a taxa de FrameRate.
O código acima (do meu post anterior) é uma boa para quem quer testar o FPS em tempo real.

Espero ter ajudado de alguma forma...
Veja ai o meu game com 18 FPS real. Veja o quanto ele diminui no navegador.


0

#12 User is offline   Rodrigo Augusto Alves Dias 

  • Group: Membros
  • Posts: 38
  • Joined: 07-September 06

Posted 01 August 2007 - 12:39 AM

valw por tudo rafael, sua ajuda para calcular o frame rate funcionou e eu consegui achar o numero ideal. E eu também vou tentar fazer como vc falou em colocar uma função para cada ação! Talvez possa ajudar mesmo!! vlw mesmo! até a próxima dúvida (he,he) thumbup.gif
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)