..:: MX Studio Fóruns ::..: Pular com o Personagem? Claro venha ver o tuto - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




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

Pular com o Personagem? Claro venha ver o tuto aprenda a fazer jump com personagem

#1 User is offline   diммy Flαรн.єxє 

  • Group: Membros
  • Posts: 27
  • Joined: 24-September 09

  Posted 24 September 2009 - 09:04 PM

Pessoal Deixem comments no tuto ai ;D
Qualquer salto começa com uma subida. Como você se lembra, até na fase Flash y significa coordenar diminuirá. Então, nós calculamos new_y = current_y-jumpspeed. Se fizermos apenas uma vez, então se move pelo herói jumpspeed e pára aí. Sim, temos de continuar a calcular a posição y novos, desde os saltos herói, mas também temos que mudar o nosso herói jumpspeed ou só vai voar para o céu e nunca retorna.

Para mudar jumpspeed vamos declarar nova variável "gravidade". A gravidade está puxando o herói de volta à terra, de que é baixo. Em cada passo, acrescentamos a gravidade da jumpspeed: jumpspeed = jumpspeed + gravidade. Você pode alterar o valor da gravidade, quando você faz menos gravidade, o herói vai voar mais alto (balão), quando você aumenta a gravidade herói, será exibida logo abaixo (uma pedra). Como temos objetos eo personagem também é um objeto, você pode realmente dar a gravidade diferentes para diferentes objetos.

Vamos olhar um exemplo. Jumpspeed valor inicial é -10 ea gravidade é 2. Primeiro passo, o herói é movido por 10 pixels e jumpspeed terá valor de 8. Próximo passo, movendo-se por 8, velocidade = 6. Depois de alguns passos, jumpspeed terá valor de 0, significando que o herói não vai subir mais. Jumpspeed Próxima etapa tem um valor positivo e herói começa a se mover para baixo.

Mas o que fazer quando o herói atinge o tile sólido (parede) ao saltar. Se o herói é saltar para cima e bate a parede acima, iremos definir o jumpspeed a 0 e herói começa a cair. Se o herói hits tile sólido abaixo, em seguida, ele desembarcou e salto é longo.

Jogo baseado na telha é sempre importante não deixar a velocidade fica maior, em seguida, tamanho de azulejo. Se o herói tem uma velocidade muito alta, ele não vai buscar a peça seguinte, e pode se mover através de paredes. Enquanto alguns magos podem se mover através de paredes, no jogo normal que é apenas um bug.

Como você pode ver, não vai afetar o movimento de salto horisontal. Sua forma ainda feito exatamente como antes. Temos apenas para verificar depois de mover o herói para a esquerda / direita, se ele andou fora da telha sólido abaixo e pode começar a cair.

No nosso Héroi
Nós adicionamos algumas propriedades para o nosso personagem:

CÓDIGO
char = (xtile: 2, ytile: 1 velocidade: 4, Jumpstart: -18, gravity: 2, jump: false);

A velocidade de propriedade irá definir a velocidade quando se desloca para a esquerda ou direita. Jumpstart é o valor inicial de jumpspeed. Gravity vai puxar o herói de volta à terra e à propriedade "salto" será usado para verificar se o herói está de salto (salto em seguida = true) ou em pé / andando / correndo / sentar / combates em terra firme (salto = false).

Na linha seguinte à mudança está na função buildmap, quando definir a posição inicial do herói. Nos exemplos que fizemos antes de colocar o herói no centro de telha, mas que vai olhar estranho, já que o herói irá iniciar sempre caindo após novo mapa é criado. Faremos herói estar no fundo da sua telha partida (não se esqueça de mover essa linha depois da linha que declara char.height):

CÓDIGO
char.y = (char.ytile (+1) * game.tileH)-char.height;

Funções e changeMap doesnt getMyCorners necessidade de qualquer alteração.

Dá-me as asas
Permite que se inicia com a função detectKeys. Nós precisamos adicionar código para verificar a tecla espaço e podemos remover cima / para baixo teclas de setas.

CÓDIGO
detectKeys function () (
   var ob = _root.char;
   var keyPressed = false;
   if (Key.isDown (Key.SPACE) e! ob.jump) (
     ob.jump = true;
     ob.jumpspeed =;
   )
   if (Key.isDown Key.RIGHT ()) (
     _root.moveChar keyPressed = (ob, 1, 0);
   ) Else if (Key.isDown (Key.LEFT)) (
     _root.moveChar keyPressed = (ob, -1, 0);
   )
   if (ob.jump) (
     _root.jump keyPressed = (ob);
   )
   if (! keyPressed) (
     ob.clip.char.gotoAndStop (1);
   ) Else (
     ob.clip.char.play ();
   )
)

Nota como nós não deixar o personagem saltar novamente quando ele já está pulando (ob.jump!). A tecla espaço será contado para começar o novo salto só se a variável jump é falsa. Mas se a tecla de espaço é pressionada e herói ainda não estava pulando, vamos definir variável para saltar e dar verdadeiro herói velocidade inicial.

Depois de teclas esquerda / seta para a direita vamos verificar se a variável jump é verdadeira e se for, vamos chamar-jump "nova" função (função de "salto" não é a mesma coisa que saltar "variável", má escolha de nomes de mim, sorry ). Esta função será chamada a cada passo até que a variável jump é verdade, então o nosso herói continua a saltar mesmo depois da tecla de espaço é liberado.

Ir função irá adicionar à gravidade jumpspeed atual. Ele irá então verificar se a velocidade de salto tem crescido muito grande e se for, vai definir a velocidade igual ao tamanho reduzido da telha pela altura do char. Últimas linhas será chamada de função moveChar:

CÓDIGO
jump function (ob) (
   ob.jumpspeed = ob.jumpspeed + ob.gravity;
   if (ob.jumpspeed> game.tileH-char.height) (
     ob.jumpspeed = game.tileH char.height;
   )
   if (ob.jumpspeed <0) (
     (ob moveChar, 0, -1, -1);
   ) Else if (ob.jumpspeed> 0) (
     (ob moveChar, 0, 1, 1);
   )
   return (true);
)

Precisamos também de mudança de função moveChar. Nos capítulos anteriores nós usamos ob.speed mudar a posição dos objetos, mas agora temos também o jumpspeed, que está mudando a cada passo. Alterar o início da função moveChar:

CÓDIGO
moveChar function (ob, dirx, diry, salto) (
   if (Math.abs (jump) == 1) (
     = velocidade salto * ob.jumpspeed;
   ) Else (
     = velocidade ob.speed;
   )

O argumento do salto será 1 ou -1 se a função moveChar é chamado de função de salto e velocidade variável terá valor de jumpspeed. Quando ele é chamado de esquerda / direita chaves de detecção de velocidade variável será igual a ob.speed. Mudar as linhas nas funções moveChar que usou ob.speed previamente variável "velocidade" assim o valor correto é usado.

No subindo código mudamos jumpspeed a 0, se bater na parede acima:

CÓDIGO
ob.ytile ob.y = * game.tileH + ob.height;
ob.jumpspeed = 0;

E na parte abaixo partimos Ir para false se detectar parede abaixo:

CÓDIGO
ob.y = (ob.ytile +1) * game.tileH ob.height;
ob.jump = false;

No movimento de esquerda e direita, podemos adicionar a linha para verificar a situação, quando o herói vai até a borda da plataforma e deve começar a cair:

CÓDIGO
ob.x + = velocidade * dirx;
fall (ob);

Assim, a última função nova teremos, é a queda:

CÓDIGO
function fall (ob) (
   if (ob.jump!) (
     getMyCorners ob.x (, ob.y 1, ob);
     if (ob.downleft e ob.downright) (
       ob.jumpspeed = 0;
       ob.jump = true;
     )
   )
)

Nós não podemos começar cair se nós já estão pulando, então primeiro vamos verificar se a variável jump é falso (o herói está atualmente). Se estamos de pé, vamos chamar o getMyCorners função para obter os pontos de canto de herói. Usamos coordenar ob.y 1 para verificar se o ponto 1 pixel menor, então personagens posição atual é passável. Se ambos os pontos de canto abaixo do herói (downleft e francamente) são walkable (com valor de verdade) que vai significar o nosso querido herói está de pé no ar.

Para corrigir o "tu-não--stand-in-the-air" situação, vamos forçar o herói a saltar, definindo a variável jump = true. Mas ao contrário de quando foi pressionada a tecla espaço, vamos definir a velocidade a partir de saltar para 0, assim o herói vai começar a cair.



Bugfix 16.01.05. Tenho atualizar o máximo controle jumpspeed na função de salto. Código deve ser rectificado

CÓDIGO
if (ob.jumpspeed> game.tileH-char.height) (
   ob.jumpspeed = game.tileH char.height;
)

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)