..:: MX Studio Fóruns ::..: Andando com o mouse ~~ !PERFECT! ~~ - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




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

Andando com o mouse ~~ !PERFECT! ~~ Aprenda!!

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

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

  Posted 24 September 2009 - 09:08 PM

Sua hora de largar o teclado e agarrar essa coisa peluda pouco sobre sua mesa. Não que o mouse do computador. Enquanto o herói que se deslocam ao redor com as chaves está bem e vem acontecendo há muito tempo, devemos também entender por que mouse é tão popular.



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;
)

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 ();
)

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 ();
)

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;
   )
)

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 ();
)

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);
)

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.


0

Share this topic:


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


Similar Topics Collapse

  Topic Forum Started By Stats Last Post Info
New Replies Carregar swf externo em frames específicos
Problemas com o carregamento de swf externo em frames específicos
Flash & ActionScript peaga 
  • 4 Replies
  • 1381 Views
New Replies Brasil e China devem fabricar biocombustíveis na África Notícias Notícias 
  • 0 Replies
  • 78 Views
New Replies Investidores da Microsoft mostram irritação com "plano Yahoo" Notícias Notícias 
  • 0 Replies
  • 331 Views
New Replies Erro com conexão ao BD
Firebird e PHP
Dreamweaver Anderson 
  • 4 Replies
  • 1577 Views
New Replies Se a Microsoft Fabricasse Carros...
Automóveis X Computadores
Humor parenti 
  • 3 Replies
  • 1485 Views
New Replies Problemas com XML e AS
quem conhece bem o laço for e xml pode me ajudar?
Flash & ActionScript joaofnr 
  • 1 Reply
  • 567 Views
New Replies Imcompatibilidade de Versões
CF 4. e CF 7.
ColdFusion Steven Tyler 
  • 3 Replies
  • 1185 Views
New Replies Help com php urgente
puxando uma pagina em html
PHP NimbuS 
  • 2 Replies
  • 901 Views

Publicidade




1 User(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)