Antes de saltar sobre o mouse, uma coisa deve ficar clara. Até agora, nosso herói foi capaz de se mover Perfect Pixel, não tanto com o mouse. Controle do mouse também significa herói vai ser reforço do centro de uma telha para o centro do próximo e ele não pode parar em algum lugar entre dois azulejo, olhar ao redor, apito nice tune. Mover-se de uma telha outro é muito mais simples, então pixel posicionamento perfeito. Nós não precisamos de detecção de colisão, por exemplo, quando queremos andar na telha seguinte, nós apenas verificar se o seu walkable e, em seguida, seu andar todos felizes até chegar ao centro.
Fazendo o mouse
Desenhar retângulo, que irá representar o mouse, faça-o clipe de filme e defina seu nome de ligação com o "rato". Certifique-se de ter alinhado gráficos mouse mesma forma como telhas - canto superior esquerdo.
Agora anexar mouse para o palco, acima de todas as telhas. Na função buildMap escrever.
CÓDIGO
_root.attachMovie ( "mouse", "mouse", 2);
Tudo o mais na função buildMap permanece o mesmo, então eu não estou indo passar por isso novamente. Para cursor do mouse para atualizar a sua posição correcta, vamos criar uma nova função, chamada de trabalho:
CÓDIGO
trabalho function () (
game.xmouse = Math.round ((_root._xmouse-game.tileW / 2) / game.tileW);
game.ymouse = Math.round ((_root._ymouse-game.tileH / 2) / game.tileH);
_root.mouse._x = game.xmouse game.tileW *;
game.ymouse _root.mouse._y = * game.tileH;
)
game.xmouse = Math.round ((_root._xmouse-game.tileW / 2) / game.tileW);
game.ymouse = Math.round ((_root._ymouse-game.tileH / 2) / game.tileH);
_root.mouse._x = game.xmouse game.tileW *;
game.ymouse _root.mouse._y = * game.tileH;
)
Nós calculamos as propriedades xmouse e ymouse no objeto do jogo, que vai saber onde é rato. Para ser exato, o número de azulejos seu excesso. No objeto char que tinha propriedades semelhantes chamado xtile e ytile. Duas últimas linhas coloque o mouse sobre a telha.
Esta função será chamada a cada quadro do clipe de filme controlador no palco:
CÓDIGO
onClipEvent (enterFrame) (
_root.work ();
)
_root.work ();
)
Como nós não utilize as teclas, você pode excluir a função detectKeys no caso de você tê-lo deixado por capítulo anterior.
Agora que temos o mouse se movendo como deveria, nós adicionamos uma maneira de clicar no palco. Escreve isto para o mc controlador:
CÓDIGO
onClipEvent (mouseUp) (
_root.getTarget ();
)
_root.getTarget ();
)
Quando o botão esquerdo do mouse é liberado, chamamos getTarget função. Ao usar o evento "clip mouseUp", chamamos a função apenas quando o botão do mouse é liberado, e não quando o seu pressionado. Se preferir que outra maneira, substituí-lo com o evento MouseDown. Escreva a função getTarget:
CÓDIGO
getTarget function () (
if (game [ "t_" + game.ymouse +"_"+ game.xmouse]. walkable) (
game.targetx = game.xmouse;
game.targety = game.ymouse;
char.moving = true;
)
)
if (game [ "t_" + game.ymouse +"_"+ game.xmouse]. walkable) (
game.targetx = game.xmouse;
game.targety = game.ymouse;
char.moving = true;
)
)
Aqui vamos fazer o jogador se clica na telha walkable. Você sabe como os jogadores, eles clicam em todos os lugares e quando você lhes pedir educadamente "Por que o nome de Deus que você tem que clicar lá?", Eles só dizem "Eu não sei, parecia local agradável". De qualquer forma, podemos garantir que ainda pode clicar em qualquer lugar que quiser, mas a nossa função ignora todos os cliques sobre a não-telhas walkable. Se, entretanto, por algum milagre, o jogador controla a clicar em azulejo walkable, podemos definir as propriedades "TargetX" e "targetY" para as peças abaixo do mouse. E nós definir a variável "char.moving" a verdade.
Movendo o herói a telha direita
Na função getTarget fizemos conjunto de variáveis "mover" a verdadeira e enquanto essa variável é verdade, nosso herói tenta se mover. Desde que nós não queremos que o herói se mover quando o jogo começa, definir a variável de mudança para falso no objeto char:
CÓDIGO
char = (xtile: 2, ytile: 1, speed: 2, movendo-se: false);
Adicionar um código no final da função de trabalho:
CÓDIGO
var ob = char;
if (! ob.moving) (
ob.clip.char.gotoAndStop (1);
) Else (
(ob moveChar);
ob.clip.char.play ();
)
if (! ob.moving) (
ob.clip.char.gotoAndStop (1);
) Else (
(ob moveChar);
ob.clip.char.play ();
)
Até variável em movimento é falso herói, fica parado e jogar qualquer doesnt animações. Mas quando se deslocam é verdade, nós jogamos o pé e animação chamada de função para mover o char. Não se preocupe, pois o movimento da telha para telha-moveChar nossa função é muito mais simples:
CÓDIGO
moveChar function (ob) (
if ((ob.x-game.tileW / 2) game.tileW% == 0 e (ob.y-game.tileH / 2%) game.tileH == 0) (
ob.xtile = Math.floor (ob.x / game.tileW);
ob.ytile = Math.floor (ob.y / game.tileH);
if (game [ "t_" + ob.xtile +"_"+( ob.ytile +1)]. walkable e game.targetx> ob.xtile) (
ob.dirx = 1;
ob.diry = 0;
) else if (game [ "t_" + ob.xtile +"_"+( ob.ytile-1)]. walkable e game.targetx <ob.xtile) (
ob.dirx =- 1;
ob.diry = 0;
) else if (game [ "t_" + (1 ob.ytile )+"_"+ ob.xtile]. walkable e game.targety> ob.ytile) (
ob.dirx = 0;
ob.diry = 1;
) else if (game [ "t_" + (ob.ytile-1 )+"_"+ ob.xtile]. walkable e game.targety <ob.ytile) (
ob.dirx = 0;
ob.diry =- 1;
) else (
ob.moving = false;
return;
)
)
ob.y + = ob.diry * ob.speed;
ob.x + = ob.speed * ob.dirx;
ob.clip._x = ob.x;
ob.clip._y = ob.y;
ob.clip.gotoAndStop (ob.dirx + ob.diry * 2 +3);
)
if ((ob.x-game.tileW / 2) game.tileW% == 0 e (ob.y-game.tileH / 2%) game.tileH == 0) (
ob.xtile = Math.floor (ob.x / game.tileW);
ob.ytile = Math.floor (ob.y / game.tileH);
if (game [ "t_" + ob.xtile +"_"+( ob.ytile +1)]. walkable e game.targetx> ob.xtile) (
ob.dirx = 1;
ob.diry = 0;
) else if (game [ "t_" + ob.xtile +"_"+( ob.ytile-1)]. walkable e game.targetx <ob.xtile) (
ob.dirx =- 1;
ob.diry = 0;
) else if (game [ "t_" + (1 ob.ytile )+"_"+ ob.xtile]. walkable e game.targety> ob.ytile) (
ob.dirx = 0;
ob.diry = 1;
) else if (game [ "t_" + (ob.ytile-1 )+"_"+ ob.xtile]. walkable e game.targety <ob.ytile) (
ob.dirx = 0;
ob.diry =- 1;
) else (
ob.moving = false;
return;
)
)
ob.y + = ob.diry * ob.speed;
ob.x + = ob.speed * ob.dirx;
ob.clip._x = ob.x;
ob.clip._y = ob.y;
ob.clip.gotoAndStop (ob.dirx + ob.diry * 2 +3);
)
Primeira linha em função verifica se o herói está em pé no centro da telha e isso significaria que ele está pronto para se mover, se ele só sabia para onde ir e por que ir lá. A posição x ea posição y são controlados por meio do módulo "%". Isso basicamente verifica o resto da divisão de posição chars pelo tamanho telha. Quando X e Y estão no centro da telha, em seguida, dividindo-os com tileW dá resto 0 e começamos a buscar novos rumos.
Algoritmos avançados pathfinding estão disponíveis para o Flash também, principalmente *. A A maioria deles estão indo fazer exame muito tempo para calcular o caminho do ponto A ao ponto B. O nosso método aqui é muito básica e não encontra os caminhos, move-se herói em uma direção até que ele atinja o objectivo de coordenar ou parede. Em seguida, ele move-se verticalmente mesma maneira.
Para saber para onde se virar, vamos olhar a decisão certa vai:
CÓDIGO
if (game [ "t_" + ob.xtile +"_"+( ob.ytile +1)]. walkable e game.targetx> ob.xtile) (
Vamos verificar se a telha direita 1 passo da telha heros atual, tem a propriedade walkable definida como true. E nós também verificar se o mouse foi clicado para a direita do herói.
Isso é tudo por hoje sobre como controlar o herói com o mouse.

Help














