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 ();
)
)
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);
)
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;
)
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;
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;
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);
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;
)
)
)
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;
)
ob.jumpspeed = game.tileH char.height;
)

Help














