| Logado como Visitante | Grupo "Visitantes" Está vendo: Forum | Sábado, 21/12/2024, 7:35 AM | RSS |
Anime Mugen


[ Novas Mensagens · Membros · Regras · Buscar · RSS ]
  • Página 1 de 1
  • 1
Moderador do fórum: lMDl  
Alcance Horizontal
ThunderbertData: Segunda, 16/05/2011, 5:14 PM | Mensagem # 1
Criador Iniciante
Grupo: Usuários
Mensagens: 343
Awards: 0
Reputação: 19
Status: Offline
Yo pessoal, hoje vim falar sobre alcance horizontal de um movimento que possui uma trajetória em forma de parábola!

Primeiramente, vamos falar pra que serve isso, para que vocês não precisem ler o tutorial inteiro para só depois descobrir para que serve xD

Bom, o que esse tutorial faz é descobrir a velocidade horizontal com a qual um helper ou o char vai até o alvo tendo uma velocidade vertical inicial e com gravidade constante.

Veja o exemplo nas imagens:

Ou seja, a velocidade horizontal do meu helper está mudando de acordo com a distância entre mim e o P2, de forma que ele vai chegar na posição onde o P2 está quando o helper atingir a altura da qual ele se iniciou!
Por exemplo, esse helper aparece na posição vertical -70, a posição diminui por causa da velocidade vertical inicial e depois aumenta por causa da gravidade.
Quando a altura do helper chegar novamente em -70, ele vai estar na posição em que o P2 estava no momento do lançamento do helper.

Agora vamos aprender a fazer isso:

Primeiramente, vamos considerar a trajetória parabólica de um objeto onde a atmosfera não interfere (ou seja, não há atrito):

A equação que define o movimento horizontal é a seguinte:

Code
x-x₀ = V₀t + ½at

Onde "x-x₀" é a distância entre o objeto (char ou helper) e o P2, "V₀" é a velocidade inicial, "a" é a aceleração e "t" é o tempo.
Como a atmosfera não está interferindo, a aceleração é 0, assim, a parte "½at" é zerada, restando:
Code
x-x₀ = V₀t

Agora, precisamos obter os valores para preencher essa equação!
Para obtermos a distância é muito simples, basta usar o trigger "P2Dist X"
Mas nós precisamos encontrar dois outros valores, são eles:
Tempo que o objeto demora para voltar a posição vertical de início;
Velocidade inicial do objeto.

Como nós estamos variando a velocidade, então temos que encontrar o tempo!
Para isso, primeiro vamos começar a bolar o state, vou estar usando o que eu fiz como exemplo:

Code
[Statedef 6201]
Type = A
MoveType = A
Physics = N ;<- Atmosfera não interfere em nada
Anim = 6200
Ctrl = 0
SprPriority = 9

[State 6201, VelSet]
Type = VelSet
Trigger1 = !Time
X = 0 ;<-- Essa velocidade encontraremos depois
Y = -6 ;<-- Velocidade vertical será sempre a mesma e é ela que determina o tempo

[State 6201, VelAdd]
Type = VelAdd
Trigger1 = 1
Y = Const(Movement.YAccel) ;<-- Aplica a gravidade

[State 6201, ChangeState]
Type = ChangeState ;<-- ChangeState da forma que você quer
Trigger1 = MoveContact
Trigger2 = Pos Y >= 0
Value = 6202
Ctrl = 0

Pronto, montei o básico do state, agora, precisamos descobrir o tempo que o objeto leva para voltar a posição de início!
Para fazermos isso, precisaremos de uma variável que irá armazenar o valor do tempo e iremos modificar o changestate para mudar de state quando o objeto voltar a posição y de origem!
Então iremos acrescentar o seguinte VarSet no state:

Code
[State 6201, VarSet]
Type = VarSet ;<- Caso você esteja fazendo isso em um helper, use ParentVarSet ao invés de VarSet
Trigger1 = 1
V = 23 ;<- Variável que você deseja usar
Value = Time ;<- Estamos armazenando o tempo

Agora, vou modificar meu ChangeState:
Code
[State 6201, ChangeState]
Type = ChangeState
Trigger1 = Pos Y >= -70 ;<- Posição Y inicial
Trigger1 = Time ;<- Garante que o helper não mude de state assim que lançado
Value = 6202
Ctrl = 0

O code inteiro agora ficou:

Code
[Statedef 6201]
Type = A
MoveType = A
Physics = N
Anim = 6200
Ctrl = 0
SprPriority = 9

[State 6201, VelSet]
Type = VelSet
Trigger1 = !Time
X = 0
Y = -6

[State 6201, VelAdd]
Type = VelAdd
Trigger1 = 1
Y = Const(Movement.YAccel)

[State 6201, VarSet]
Type = VarSet
Trigger1 = 1
V = 23
Value = Time

[State 6201, ChangeState]
Type = ChangeState
Trigger1 = Pos Y >= -70
Trigger1 = Time
Value = 6202
Ctrl = 0

Pronto, agora que temos a variável armazenando o tempo, precisamos mostrar o tempo!
Para isso, usamos um DisplayToClipboard no statedef -2, caso você não tenha o statedef -2, basta criá-lo com a seguinte linha:

Code
[Statedef -2]

O DisplayToClipboard vai ficar assim:
Code
[State -2, DisplayToClipboard]
Type = DisplayToClipboard
Trigger1 = 1
Text = "Tempo = %d"
Params = Var(23) ;<- Variável utilizada pelo objeto

Após isso, salve e teste o char...
Com o MUGEN aberto, aperte ctrl+d para entrar no modo debug e veja o valor do Tempo e anote-o


No meu caso, o tempo é 27

Com o tempo em mãos, podemos apagar o DisplayToClipboard, o VarSet e retornar o ChangeState ao original, retornando ao código:

Code
[Statedef 6201]
Type = A
MoveType = A
Physics = N
Anim = 6200
Ctrl = 0
SprPriority = 9

[State 6201, VelSet]
Type = VelSet
Trigger1 = !Time
X = 0
Y = -6

[State 6201, VelAdd]
Type = VelAdd
Trigger1 = 1
Y = Const(Movement.YAccel)

[State 6201, ChangeState]
Type = ChangeState
Trigger1 = MoveContact
Trigger2 = Pos Y >= 0
Value = 6202
Ctrl = 0

Agora que temos o tempo em mãos, vamos voltar para a fórmula:

Code
x-x₀ = V₀t

Agora nós temos a distância e o tempo, para calcular a velocidade teremos que mexer na fórmula!
Primeiramente, trocamos os membros da equação de lado:
Code
V₀t = x-x₀

Agora, como o tempo está multiplicando a velocidade inicial, passaremos ele para o outro lado, mas dividindo:
Code
V₀ = (x-x₀)/t

Pronto, temos agora a fórmula que acha a velocidade, temos a distância e temos o tempo!
Basta então mexermos no VelSet!
Lembrando:
"x-x₀" = P2Dist X
"t" = Tempo encontrado (no meu caso, 27)
O code vai ficar:
Code
[Statedef 6201]
Type = A
MoveType = A
Physics = N
Anim = 6200
Ctrl = 0
SprPriority = 9

[State 6201, VelSet]
Type = VelSet
Trigger1 = !Time
X = (P2Dist X)/27.0 ;<- Velocidade inicial
Y = -6

[State 6201, VelAdd]
Type = VelAdd
Trigger1 = 1
Y = Const(Movement.YAccel)

[State 6201, ChangeState]
Type = ChangeState
Trigger1 = MoveContact
Trigger2 = Pos Y >= 0
Value = 6202
Ctrl = 0

Pronto!
Agora é só testar, ver o resultado e acrescentar o que quizer no code, como HitDef, AfterImage ou seja lá o que vc precisa colocar xD!
Lembrando que, caso você deseje alterar a velocidade Y ou a gravidade, terá que calcular o tempo de novo xD
Espero que esse tutorial ajude o pessoal ai ^^

Créditos:
Professor Aldo Job (meu professor de física da faculdade xD)
Gnuplot (programa para desenhar gráficos)
GIMP (editor de imagens)




Vlw MD ²
Vlw Baka-Sennin
Vlw FM ²
 
raymundoData: Segunda, 16/05/2011, 5:36 PM | Mensagem # 2
Iniciante
Grupo: Usuários
Mensagens: 27
Awards: 0
Reputação: 2
Status: Offline
Thunderbert, muito bom tutu mano, vai ajudar a bastante gente aqui na am :D
 
FMitData: Quarta, 18/05/2011, 2:41 PM | Mensagem # 3
Criador
Grupo: Usuários
Mensagens: 706
Awards: 3
Reputação: 18
Status: Offline
tutorial realmente bom.
curti muito, mas podia ter visto um jeito de quando ele tiver muito perto não ficar estranho que nem a gif 1
mas o code e a explicação estão espetaculares.
eu consigo fazer tanta coisa na escola com fisica, mas fazer isso se transformar em code de mugen
é coisa de gênio.
Parabéns pelos seus conhecimentos e pelo tutorial.


 
carlos8080Data: Quarta, 18/05/2011, 4:20 PM | Mensagem # 4
Criador
Grupo: Usuários
Mensagens: 480
Awards: 0
Reputação: 11
Status: Offline
kra fisica eh tenso mais eh legal '-'
ta muito fods o tuto xD
eu vo usa ele no meu char :D
vlw por posta man, vai ajuda muito ^^



------------------------------------Projetos---------------------------------------

C_Itachi - 30%

Hidan Sheet - 5%
 
Dark_KingData: Sexta, 20/05/2011, 8:40 PM | Mensagem # 5
Criador
Grupo: Usuários
Mensagens: 622
Awards: 1
Reputação: 11
Status: Offline
Mano, isso parece aula de matemateca, lol, ja pensou em virar professor?



W.I.P's
(DRAGON BALL) Baby Vegeta Pocket - 60% / Uub SB - 10%
(YUYU HAKUSHO) Yusuke - 95%
 
ThunderbertData: Sábado, 21/05/2011, 10:34 AM | Mensagem # 6
Criador Iniciante
Grupo: Usuários
Mensagens: 343
Awards: 0
Reputação: 19
Status: Offline
Quote (raymundo)
Thunderbert, muito bom tutu mano, vai ajudar a bastante gente aqui na am :D

Vlw ae manolo ^^

Quote (FMit)
tutorial realmente bom.
curti muito, mas podia ter visto um jeito de quando ele tiver muito perto não ficar estranho que nem a gif 1
mas o code e a explicação estão espetaculares.
eu consigo fazer tanta coisa na escola com fisica, mas fazer isso se transformar em code de mugen
é coisa de gênio.
Parabéns pelos seus conhecimentos e pelo tutorial.

Vlw ae FM!
Quanto a proximidade, para fazer isso, teria que encontrar uma fórmula para determinar o tempo e eu não sei se isso é possível no mugen, pois com a variação de tempo, poderiamos variar, além da velocidade horizontal, a velocidade vertical tb xD
Da forma que está no meu exemplo, a bomba sempre leva 27 ticks até alcançar a altura inicial xD
Mas vlw ae o comentário, quem sabe mais pra frente eu não bole algo mais avançado ^^
Ahhh, e converter o q vc aprende em física pra MUGEN nem é tão difícil ^^

Quote (carlos8080)
kra fisica eh tenso mais eh legal '-'
ta muito fods o tuto xD
eu vo usa ele no meu char :D
vlw por posta man, vai ajuda muito ^^

Vlw ae manolo! Boa sorte com o char ^^

Quote (Bruno_SS)
Mano, isso parece aula de matemateca, lol, ja pensou em virar professor?

aheuhaeuhauehua! Nem é matemática, é física xD
E sim, já pensei em virar professor, mas nem vou ser, naum sei se aguento os alunos q fazem das salas de aula uma baderna xD

Vlw os comentários ae pessoal ^^




Vlw MD ²
Vlw Baka-Sennin
Vlw FM ²
 
taylorData: Sábado, 21/05/2011, 11:18 PM | Mensagem # 7
Editor
Grupo: Usuários
Mensagens: 158
Awards: 0
Reputação: 15
Status: Offline
Eu sempre to vendo os topicos, mais nunca comento...

Mais esse aqui eu vo ter que comentar *o*

Muito legal mesmo esse tutorial cara, efeito muito interessante, e muito usavel!
Parabens cara, explico muito bem, exemplifico muito bem tambem!

Thunder so me impressionando o/


 
ThunderbertData: Domingo, 22/05/2011, 11:42 AM | Mensagem # 8
Criador Iniciante
Grupo: Usuários
Mensagens: 343
Awards: 0
Reputação: 19
Status: Offline
Quote (taylor)
Eu sempre to vendo os topicos, mais nunca comento...

Mais esse aqui eu vo ter que comentar *o*

Muito legal mesmo esse tutorial cara, efeito muito interessante, e muito usavel!
Parabens cara, explico muito bem, exemplifico muito bem tambem!

Thunder so me impressionando o/


Vlw ae Taylor *_*




Vlw MD ²
Vlw Baka-Sennin
Vlw FM ²
 
OIlusionistaData: Sexta, 12/08/2011, 6:29 PM | Mensagem # 9
Editor
Grupo: Usuários
Mensagens: 180
Awards: 0
Reputação: 7
Status: Offline
Gostei, cara, bem util isso.

Só acho que poderia usar enemynear ao invés de P2Dist, pq no modo simul nunca vai calcular o p4.
E viva a Elecbyte que nao tem um trigger direto para p4, rs


Beeing here since 1999
 
ThunderbertData: Sexta, 12/08/2011, 10:35 PM | Mensagem # 10
Criador Iniciante
Grupo: Usuários
Mensagens: 343
Awards: 0
Reputação: 19
Status: Offline
Quote (OIlusionista)
Gostei, cara, bem util isso.

Só acho que poderia usar enemynear ao invés de P2Dist, pq no modo simul nunca vai calcular o p4.
E viva a Elecbyte que nao tem um trigger direto para p4, rs


Vlw ^^

Mas eu ainda tenho minhas dúvidas com relação ao P2Dist...
Experiências já me levaram a acreditar q P2Dist e P2BodyDist pega a distância do inimigo mais próximo...
Não sei ainda, preciso fazer mais testes xD




Vlw MD ²
Vlw Baka-Sennin
Vlw FM ²
 
OIlusionistaData: Sábado, 13/08/2011, 11:54 AM | Mensagem # 11
Editor
Grupo: Usuários
Mensagens: 180
Awards: 0
Reputação: 7
Status: Offline
Nao, elas pegam a distancia do p2.
No modo simul, pega do p2 tbem, e o p4 so é tratado como p2 quando o p2 morre.


Beeing here since 1999
 
ThunderbertData: Sábado, 13/08/2011, 1:25 PM | Mensagem # 12
Criador Iniciante
Grupo: Usuários
Mensagens: 343
Awards: 0
Reputação: 19
Status: Offline
Quote (OIlusionista)
Nao, elas pegam a distancia do p2.
No modo simul, pega do p2 tbem, e o p4 so é tratado como p2 quando o p2 morre.

hummm, entendo...
o negócio é usar EnemyNear então ao invés de P2Dist...
Mais pra frente eu vou mudar então...




Vlw MD ²
Vlw Baka-Sennin
Vlw FM ²
 
-prData: Sábado, 13/08/2011, 10:42 PM | Mensagem # 13
Aprendiz Destaque
Grupo: Usuários
Mensagens: 107
Awards: 1
Reputação: 17
Status: Offline
gostei da sua adaptação da física para o mugen, eu adoro quando se precisa usar algum conhecimento avançado de matemática ou física no mugen. Quando eu fiz meu luffy eu tive que quebrar a cabeça no special que as sombras vêm pra cima dele, no fim acabei tendo que usar trigonometria... foi épico quando eu achei num livro de matemática a resposta para o problema que eu tava encucado o dia todo.

eu só achei um erro no seu tutorial, mas não é tão relevante:

Quote (Thunderbert)
x-x₀ = V₀t + ½at


a fórmula certa seria x-x₀ = V₀t + ½at² (o tempo é ao quadrado). Mas como você anulou essa parte da equação acabou não interferindo em nada.

enfim, ótimo o tutorial.
A propósito, vc faz faculdade de quê?



http://PRmugen.ucoz.com
 
ThunderbertData: Domingo, 14/08/2011, 8:17 AM | Mensagem # 14
Criador Iniciante
Grupo: Usuários
Mensagens: 343
Awards: 0
Reputação: 19
Status: Offline
Quote (-pr)
gostei da sua adaptação da física para o mugen, eu adoro quando se precisa usar algum conhecimento avançado de matemática ou física no mugen. Quando eu fiz meu luffy eu tive que quebrar a cabeça no special que as sombras vêm pra cima dele, no fim acabei tendo que usar trigonometria... foi épico quando eu achei num livro de matemática a resposta para o problema que eu tava encucado o dia todo.

eu só achei um erro no seu tutorial, mas não é tão relevante:

Quote (Thunderbert)
x-x₀ = V₀t + ½at

a fórmula certa seria x-x₀ = V₀t + ½at² (o tempo é ao quadrado). Mas como você anulou essa parte da equação acabou não interferindo em nada.

enfim, ótimo o tutorial.
A propósito, vc faz faculdade de quê?

Vlw ae ^^
Realmente, o tempo é ao quadrado em at², foi deslize meu xD
E eu faço faculdade de Ciências da Computação ^^




Vlw MD ²
Vlw Baka-Sennin
Vlw FM ²
 
  • Página 1 de 1
  • 1
Buscar:

Copyright Anime Mugen © 2024 Hospedado por uCoz
Refresh Smileys Manager
Mini-chat