Quarta-feira, 24/05/2017, 3:56 AM
Bem vindo Visitante | RSS
Menu
Chat
Globo de Vísitas
Estatísticas
Total Online: 1
Visitantes: 1
Usuários: 0
Login
Esse código serve para calcular a distância entre o player e o inimigo mais próximo!

Pergunta: Mas não é só usar P2Dist X ou P2BodyDist X?
Resposta: Primeiramente, isso calculária a distância X do player apenas com relação ao P2, e se for uma luta Coop?

Pergunta: Então, eu posso fazer assim (EnemyNear,Pos X) - Pos X?
Resposta: Com isso você irá calcular apenas a distância X!

Pergunta: Mas o que a Distância Real então?

Bom, eu vou tentar explicar mais ou menos como funciona.
Vamos supor que temos 2 players

E temos também suas distâncias X e Y

Mas essas distâncias nem sempre são a verdadeira distância entre um corpo e outro, pois a distância entre um corpo e outro é sempre uma linha reta!
Então a Verdadeira distância seria

Temos então um triângulo retângulo onde a hipotenusa é a distância real e os catetos são as distâncias X e Y!

Como diz o Teorema de Pitágoras:


Quote
Em qualquer triângulo retângulo, o quadrado do comprimento da hipotenusa é igual à soma dos quadrados dos comprimentos dos catetos.

Resumindo: Distância² = Dist X² + Dist Y²

Pergunta: E como vamos escrever isso no MUGEN?

Primeiramente, vamos armazenar a distância X e Y entre o Player e o inimigo mais próximo em variáveis:


Quote
[State -3, Distância X]
Type = VarSet
Trigger1 = 1
FV = 0
Value = ((EnemyNear,Pos X) - Pos X)

[State -3, Distância Y]
Type = VarSet
Trigger1 = 1
FV = 1
Value = ((EnemyNear,Pos Y) - Pos Y)


Pergunta: Mas por que você está usando "FV" ao invés de "V"?
Resposta: V = Var, FV = FVar, as Vars armazenam apenas valores INTEIROS, enquanto as FVars armazenam valores quebrados, com casas decimais, tornando nosso cálculo muito mais preciso!

Pergunta: Ok, nós armazenamos os valores nas variáveis! Fazer um número elevado ao quadrado é só multiplicar por ele mesmo, mas como vamos calcular a raiz quadrada no final?
Resposta: Já q o MUGEN em sí não possui uma ferramente para extração de raiz, usaremos o mesmo cálcua das calculadoras q existem por ai! Elas utilizam o Número de Euler e Logoratmo para extrair a raiz, chegando na seguinte fórmula:

Traduzindo: A raiz de um número é igual ao Número de Euler elevado a 0,5 vezes o logaritmo LN daquele número.

Para nossa felicidade, o MUGEN possui todas as ferramentas q precisamos parar fazer esses cálculos!
O Número de Euler é um trigger e é representado apenas pela letra "E", mas nós não queremos apenas o Número de Euler, nós queremos elevá-lo à alguma coisa, então, podemos usar o Trigger "Exp" q nada mais é do que o Número de Euler elevado a alguma coisa!

Pergunta: Como funciona o trigger "Exp"?
Resposta: Exp(valor), ou seja, é o número de Euler elevado à algum valor!

Pergunta:e o Logaritmo?
Resposta: O logaritmo é calculado no MUGEN com o trigger "Log", mas nós não queremos um logaritmo normal, nós queremos o logaritmo Ln que existe na fórmula, e felizmente o MUGEN possui o trigger "Ln".

Pergunta: E como fica o código para calcular a distância? Pq até agora a gente só armazenou a distância X e Y...

O código para calcular a distância vai ficar assim:


Quote
[State -3, Distância Real]
Type = VarSet
Trigger1 = 1
FV = 2
Value = Exp(0.5*Ln((FVar(0)*FVar(0))+(FVar(1)*FVar(1))))

Pergunta: Não entendi nada daqueles parênteses locos O___O
Resposta: O q acontece é que o MUGEN trabalha apenas com parênteses, mas se quisermos transformar em uma fórmula matemática no papel, ficaria assim:
Exp{0.5*Ln[(FVar(0)*FVar(0))+(FVar(1)*FVar(1))]}
Os cálculos q são realizados primeiro são os q estão dentro dos parênteses, seguidos pelos colchetes e, por fim, a chave, ou seja, a ordem do cálculo ficou:
1º Elevar as distâncias armazenadas ao quadrado
2º Somar os resultados do 1º resultado
3º Tirar o logaritmo do 2º resultado e multiplica-lo por 0,5
4º Elevar o Número de Euler ao 3º resultado

Pergunta: E como eu posso testar pra ver se esse cálculo deu certo?
Resposta: Você pode usar um DisplayToClipboard para escrever os valores das FVars no modo debug!


Quote
[State -3, Valores das FV's]
type = DisplayToClipboard
trigger1 = 1
text = "Dist X = %d || Dist Y = %d || Dist = %d"
params = FVar(0), Fvar(1), Fvar(2)


Se fizermos os cálculos:


Quote
163,452² = 140² + (-84,36)²
26716,556304 = 19600 + 7116,6096
26716,556304 = 26716,6096

Não deu EXATO, mas deu um valor bem aproximado! Pois o MUGEN arredonda algumas casas!
Se você fizer a raiz de 26716,6096, você vai ter o resultado: 163,45216303249...

Pergunta: UIA! Interessante, mas aonde é que eu posso aplicar esse código ai?? .-.
Resposta: Sinceramente, existem poucas apicações para esse código em sí, você pode usá-lo para calcular a distância ao invés de apenas usar a distância X, porque se você quiser fazer um golpe q só é possível se o inimigo estiver perto, normalmente vai usar o P2Dist X, mas e se o inimigo estiver perto mas estiver no ar? Então você pode usar esse código para calcular uma distância mais exata!

Pergunta: Hummm, mas você disse ali em cima "esse códig em sí", o que você quiz dizer com isso?
Resposta: Esse código pode ser melhorado se usarmos trigonometria para calcular os ângulos do triângulo, com isso, poderiamos usar o código em helpers para eles ficarem com o ângulo certinho quando estiver indo na direção do inimigo!

Pergunta: Você vai postar esse código com trigonometria?
Resposta: Não! Apesar de eu gostar muito de matemática, odeio trigonomeria xD

Bom, vou ficando por aqui, espero que esse tutorial seja útil para alguém xD
Flws!

Pesquisar
Hospedagem
Deseja ter seu trabalho hospedado aqui?
Clique aqui.
Calendário
«  Maio 2017  »
STQQSSD
1234567
891011121314
15161718192021
22232425262728
293031
Link Us
Clique na imagem para ver o código.
Thunder Mugen
Thunder Mugen
Parceiros

Valeuzão Deus
Mugen Full
Kazushi
Lab's Mugen

Copyright MyCorp © 2017Thunderbert