Na imagem, existem 4 tipos diferentes de escadas. Em azulejo Uma escada está dentro da telha da parede, que normalmente não é passável. O herói pode fazer em uma telha? Ele pode subir e descer, mas ele deve mais ser capaz de andar para a esquerda ou direita ou ele será preso na parede. Pergunte a qualquer um, que foi preso na parede e todos dizem que a faz se sentir bem.
Em azulejo B telha escada em si é passável e telha por cima também tem escada, assim o herói deve ser capaz de subir e descer. Hero também pode mover para a esquerda ou direita, mas quando o faz, ele deve cair para baixo depois de sair da escada.
Em azulejo C there isnt escada abaixo e subir herói shouldnt para baixo, ele só pode subir a pé ou esquerda / direita.
Tile D não está disponível em todos os jogos. Alguns pensam que é apenas um nível de design ruim, levar doesnt escada em qualquer lugar, que termina no ar. Herói deve ser capaz de subir acima dela e ficar na escada? Ele pode andar em seguida à direita na telha sólido ao lado de escada?
Esses são apenas alguns exemplos, existem muitos mais tipos possíveis de escadas, mas eu espero que você possa ver como é importante ter a definição exata antes de tentar escrever o código. Como os jogos não são todos semelhantes, então algo encaixe perfeitamente em um jogo, é perda de tempo, energia e paz no mundo no outro jogo.
As regras
Permite gravar as nossas regras de escadas e circulação de herói:
1. Hero pode subir na escada usando cima e para baixo teclas de setas
2. Hero pode subir se houver escada em seu centro actual pontos para cima ou para baixo
3. O herói pode descer se o azulejo seu ponto central para baixo acaba, tem escada
4. O herói pode mover para a esquerda / direita da escada, se nenhum dos seus pontos de canto vai acabar no muro
5. Hero salto cant da escada
Isso deve fazê-lo.
Uma escada, por favor
Usaremos clipe de filme em separado com gráficos escada que será afixado no azulejo em azulejo tem escada. Dessa forma, nós não temos que desenhar gráficos diferentes para cada escada de diferentes origens. Verifique se o seu clipe de filme tem escada "Exportar este filme" marcada e está ligada como "escada".
No clipe de filme escada desenhar gráficos escada mesma altura como a telha e colocá-los no centro da telha lateralmente.
Como em todos os outros a telha, vamos declarar um novo tipo de telha para escadas:
CÓDIGO
game.Tile4 = function () ();
game.Tile4.prototype.walkable = false;
game.Tile4.prototype.frame = 2;
game.Tile4.prototype.ladder = true;
game.Tile4.prototype.item escada = "";
game.Tile5 = function () ();
game.Tile5.prototype.walkable = true;
game.Tile5.prototype.frame = 1;
game.Tile5.prototype.ladder = true;
game.Tile5.prototype.item escada = "";
game.Tile4.prototype.walkable = false;
game.Tile4.prototype.frame = 2;
game.Tile4.prototype.ladder = true;
game.Tile4.prototype.item escada = "";
game.Tile5 = function () ();
game.Tile5.prototype.walkable = true;
game.Tile5.prototype.frame = 1;
game.Tile5.prototype.ladder = true;
game.Tile5.prototype.item escada = "";
Esses dois tipos de escada tem número de quadro diferente para mostrar, mas ambos têm a propriedade "escada" definido para true (vamos usá-lo para verificar se o herói está em qualquer lugar perto da escada) e ambos têm a propriedade "item" igual a "escada "(vamos usar isso para anexar gráficos escada para o azulejo).
Anexar o filme escada para o azulejo na função buildMap após o envio de telha para corrigir quadro:
CÓDIGO
game.clip [nome]. gotoAndStop (game [name]. frame);
if (game [name]. item! = undefined) (
game.clip [nome]. game (attachMovie [nome]. item, "item", 1);
)
if (game [name]. item! = undefined) (
game.clip [nome]. game (attachMovie [nome]. item, "item", 1);
)
Este código verifica se o item "propriedade" no azulejo actual tem valor não-vazio. Se o "item" tem valor, então damos clipe de filme ligado com o nome como o valor de "item" de propriedade para o ladrilho atual e terá nome de instância "item". Você pode anexar quaisquer outros itens mesma forma, apenas não tente colocar muitos itens na telha mesmo.
Para não digitar o mesmo código duas vezes, permite mover o final da função moveChar e fazer a função de separar a nomeação updateChar esta nova função. função moveChar vai terminar com:
CÓDIGO
updateChar (ob, dirx, diry);
return (true);
e função updateChar terá:
updateChar function (ob, dirx, diry) (
ob.clip._x = ob.x;
ob.clip._y = ob.y;
ob.clip.gotoAndStop (dirx + diry * 2 +3);
ob.xtile = Math.floor (ob.clip._x / game.tileW);
ob.ytile = Math.floor (ob.clip._y / game.tileH);
if (game [ "t_" + ob.ytile +"_"+ ob.xtile]. porta e ob == _root.char) (
changeMap (OB);
)
)
return (true);
e função updateChar terá:
updateChar function (ob, dirx, diry) (
ob.clip._x = ob.x;
ob.clip._y = ob.y;
ob.clip.gotoAndStop (dirx + diry * 2 +3);
ob.xtile = Math.floor (ob.clip._x / game.tileW);
ob.ytile = Math.floor (ob.clip._y / game.tileH);
if (game [ "t_" + ob.ytile +"_"+ ob.xtile]. porta e ob == _root.char) (
changeMap (OB);
)
)
Em função da queda adicionar
ob.climb = false;
Modificar detectKeys função para as teclas de seta:
CÓDIGO
if (Key.isDown Key.RIGHT ()) (
getMyCorners (ob.x-ob.speed, ob.y, ob);
if (ob.climb! ou ob.downleft e ob.upleft e ob.upright e ob.downright) (
_root.moveChar keyPressed = (ob, 1, 0);
)
) Else if (Key.isDown (Key.LEFT)) (
getMyCorners (ob.x-ob.speed, ob.y, ob);
if (ob.climb! ou ob.downleft e ob.upleft e ob.upright e ob.downright) (
_root.moveChar keyPressed = (ob, -1, 0);
)
) Else if (Key.isDown (Key.UP)) (
if (ob.jump! e checkUpLadder (ob)) (
_root.climb keyPressed = (ob, -1);
)
) Else if (Key.isDown (Key.DOWN)) (
if (ob.jump! e checkDownLadder (ob)) (
_root.climb keyPressed = (ob, 1);
)
)
getMyCorners (ob.x-ob.speed, ob.y, ob);
if (ob.climb! ou ob.downleft e ob.upleft e ob.upright e ob.downright) (
_root.moveChar keyPressed = (ob, 1, 0);
)
) Else if (Key.isDown (Key.LEFT)) (
getMyCorners (ob.x-ob.speed, ob.y, ob);
if (ob.climb! ou ob.downleft e ob.upleft e ob.upright e ob.downright) (
_root.moveChar keyPressed = (ob, -1, 0);
)
) Else if (Key.isDown (Key.UP)) (
if (ob.jump! e checkUpLadder (ob)) (
_root.climb keyPressed = (ob, -1);
)
) Else if (Key.isDown (Key.DOWN)) (
if (ob.jump! e checkDownLadder (ob)) (
_root.climb keyPressed = (ob, 1);
)
)
Depois temos detectado a esquerda ou seta para a direita, vamos verificar se o herói não é escalada (ob.climb!) Ou em caso que ele está subindo, vamos verificar que nenhum dos seus pontos de canto será na parede.
Para cima e para baixo teclas de setas que verificar primeiro se o herói não está pulando (ob.jump!) E as condições para a escalada são cumpridas utilizando duas novas funções: checkUpLadder e checkDownLadder. Se está tudo bem, que chamamos de nova função "subir" para movimentar nosso herói.
Escalada funções
Faremos 3 novas funções para a escalada, 1 para verificar se ele é bom para subir, 1 para verificar se é que podemos descer e última função para mover personagem.
CÓDIGO
checkUpLadder function (ob) (
Downy var = Math.floor ((ob.y + ob.height-1) / game.tileH)
upy var = Math.floor (((ob.y-ob.height)-ob.speed) / game.tileW)
upLadder var jogo = [ "t_" + upy +"_"+ ob.xtile]. escada
downLadder var jogo = [ "t_" + downy +"_"+ ob.xtile]. escada
upBlock var jogo = [ "t_" + upy +"_"+ ob.xtile]. walkable
if (upLadder == true ou upBlock == true) (
if (upLadder ou downLadder) (
return (true)
)
) else (
ob.ytile ob.y = * game.tileH + ob.height;
(ob updateChar, 0, -1)
return (false)
)
)
Downy var = Math.floor ((ob.y + ob.height-1) / game.tileH)
upy var = Math.floor (((ob.y-ob.height)-ob.speed) / game.tileW)
upLadder var jogo = [ "t_" + upy +"_"+ ob.xtile]. escada
downLadder var jogo = [ "t_" + downy +"_"+ ob.xtile]. escada
upBlock var jogo = [ "t_" + upy +"_"+ ob.xtile]. walkable
if (upLadder == true ou upBlock == true) (
if (upLadder ou downLadder) (
return (true)
)
) else (
ob.ytile ob.y = * game.tileH + ob.height;
(ob updateChar, 0, -1)
return (false)
)
)
Este código calcula primeiro para cima e para baixo pontos centrais do nosso herói. Se a telha com ponto central superior tem qualquer escada ou é walkable podemos fazer outra verificação para certificar-se, pelo menos, 1 escada é colocada em cima ou para baixo ponto central.
CÓDIGO
checkDownLadder function (ob) (
Downy var = Math.floor ((ob.speed + + ob.y ob.height) / game.tileH);
downLadder var jogo = [ "t_" + Downy +"_"+ ob.xtile]. escada;
if (downLadder) (
return (true);
) Else (
fall (ob);
)
)
Downy var = Math.floor ((ob.speed + + ob.y ob.height) / game.tileH);
downLadder var jogo = [ "t_" + Downy +"_"+ ob.xtile]. escada;
if (downLadder) (
return (true);
) Else (
fall (ob);
)
)
Para verificar a descer, precisamos de "propriedade" escada do lado abaixo do herói. Mas ao contrário de subir, temos que olhar para o azulejo, onde o herói estará de pé depois que ele se move (ob.speed + + ob.y ob.height).
CÓDIGO
subir function (ob, diry) (
ob.climb = true;
ob.jump = false;
ob.y + = diry * ob.speed;
ob.x = (ob.xtile game.tileW *) + game.tileW / 2;
(ob updateChar, 0, diry);
return (true);
)
ob.climb = true;
ob.jump = false;
ob.y + = diry * ob.speed;
ob.x = (ob.xtile game.tileW *) + game.tileW / 2;
(ob updateChar, 0, diry);
return (true);
)
Na subida função que definir primeiro a escalar bandeiras a verdade e passar para falso. Em seguida, calculamos y posição nova para o herói. Em seguida, será a posição do herói lateralmente no centro da escada:
CÓDIGO
ob.x = (ob.xtile game.tileW *) + game.tileW / 2;
O herói pode começar a subir, enquanto o seu centro está em azulejo com escada, mas ficaria estranho se ele iria subir no lado direito ou esquerdo da escada.
Última actualização que a posição real do personagem usando função updateChar mesmo.

Help














