| 
				
				[Dica] Expressões 2
				 |   |  
| Thunderbert | Data: Terça, 29/03/2011, 11:55 AM | Mensagem # 1 |  
 Criador Iniciante 
Grupo: Usuários 
Mensagens: 343 
Awards:  0 
Reputação:  19 
Status: Offline 
 
 | YO pessoal!   Hoje vim aqui falar um pouco mais sobre expressões!   Vou começar falando sobre os valores assumidos pelos triggers!   Os triggers podem assumir dois valores diferentes!   O primeiro é o valor boleano, também conhecido como verdadeiro ou falso, onde verdadeiro é 1 e falso é 0   Esse primeiro valor vem quando você compara o trigger com alguma coisa!   Por exemplo:   Trigger1 = Time = 48   Quando Time for 48, o valor do Trigger vai ser 1 e ele vai se ativar!   Do contrário, o valor do Trigger será 0 e ele não vai se ativar!   O segundo valor é o valor do Trigger em sí, ele vem quando você não compara ele com algo, mas sim, usa ele como parte do cálculo!   Por exemplo:   Trigger1 = Time   Nesse caso, o Trigger vai valer exatamente o tempo, ou seja, quando Time for 30, o valor por ele assumido será 30!   Então, nesse caso, o Trigger somente não irá ser ativado quando Time for 0...  Mas algo que muitas pessoas não sabem, é q é possível usar o valor do trigger em cálculos fora do Trigger!   Por exemplo, suponhamos q eu quero girar o char ou um helper de acordo com o tempo:    Code [State X, AngleDraw]   Type = AngleDraw   Trigger1 = 1   Value = 5*Time     Nesse caso, o ângulo será 5 vezes o Time, então, quando Time for 10, o ângulo será 50!  Agora, algo que menos pessoas ainda sabem, é q é possível usar também o valor boleano nos cálculos, afinal, eles valem 1 e 0!   Então, podemos fazer algo do tipo:    Code [State X, ChangeState]   Type = ChangeState   Trigger1 = AnimTime = 0   Value = 205+(Command = "holdfwd")   Ctrl = 0     Nesse caso, se o player não estiver apertando o comando "holdfwd", o char vai para o state 205, se estiver segurando, vai pro 206!  Enfim, é possível combinar ambos os valores em cálculos mais elaborados ^^   Agora, quero falar sobre algo que pouquíssima gente conhece!   A maioria aqui sabe dos operadores lógicos básicos do MUGEN que são &&, ||, ^^ e !   Esses os 4 operadores lógicos básicos mesmo.   Mas agora que eu to fazendo faculdade, aprendi que existem mais dois valores lógicos!   Eles são chamados de Condicional (→) e Bicondicional (↔)   Nenhum dos dois existem especificamente no MUGEN, mas é possível usá-los no MUGEN e logo vou dizer como.   A condicional é algo do tipo "se então"   Se alguma coisa, então isso   Partindo para o que interessa para o MUGEN, a condicional analisaria duas expressões e resultaria em valor falso apenas quando a primeira expressão for falsa e a segunda verdadeira!   Por exemplo, se existisse esse operador no MUGEN, seria algo do tipo:   Trigger1 = Time = 48 → Command = "holdfwd"   Então, o trigger estaria sempre ativado a menos que o Time não seja 48 e o commando "holdfwd" esteja sendo apertado   Lembrando q esse símbolo → não existe no MUGEN, só estou explicando a teoria dessas operações lógicas!   A bicondicional é algo do tipo "se e somente se"   Alguma coisa se e somente se isso   Partindo para o que interessa para o MUGEN, a bicondicional analisaria duas expressões e resultaria em valor falso caso uma das expressões seja verdadeira e outra falsa, não importando a ordem!   Por exemplo, se existisse esse operador no MUGEN, seria algo do tipo:   Trigger1 = Time = 48 ↔ Command = "holdfwd"   Então, o trigger estará ativado enquando o Time não for 48 e o commando "holdfwd" não estiver sendo apertado ou quando as duas condições forem verdadeiras!   Lembrando q esse símbolo ↔ não existe no MUGEN, só estou explicando a teoria dessas operações lógicas!   Agora vamos partir para o que realmente interessa!   Como utilizar a Condicional e Bicondicional no MUGEN?   Eu vou pular os cálculos e teorias e passar para vocês apenas a fórmula pronta ^^   Condicional:   p → q = !p || q   Exemplo:   Time = 48 → Command = "holdfwd" seria a mesma coisa que Time != 48 || Command = "holdfwd"   Bicondicional:   p ↔ q = (p || q) && (q || p)   Exemplo   Time = 48 ↔ Command = "holdfwd" seria a mesma coisa que (Time != 48 || Command = "holdfwd") && (Command != "holdfwd" || Time = 48)   Parece meio confuso, mas é algo que pode vir a ser útil ^^   Espero que essas informações lhe sejam úteis!   Flws!   Edit:   Só pra avisar que a fórmula da Bicondicional tava errada xD   Mas já arrumei!   Abrax ^^ 
 
         Vlw MD ²   Vlw Baka-Sennin   Vlw FM ²
 |  
|   | 
 |    |  
| FMit | Data: Terça, 29/03/2011, 12:11 PM | Mensagem # 2 |  
| 
 Criador 
Grupo: Usuários 
Mensagens: 706 
Awards:  3 
Reputação:  18 
Status: Offline 
 
 | eu tinha razão, você é um monstro :l   depois do primeiro code eu nunca tinha visto nada do tipo D:   fico muito bem explicado, e fico foda também, gostei cara, parabéns...   você sempre se superando ^^'
 
  
 |  
|   | 
 |    |  
| Roobin-K | Data: Terça, 29/03/2011, 2:33 PM | Mensagem # 3 |  
 Iniciante 
Grupo: Usuários 
Mensagens: 18 
Awards:  0 
Reputação:  2 
Status: Offline 
 
 | Bem interessante, dá uma olhada nos DOCS acho q ja vi algo sobre Bicondição por lá.   No mais méritos pra você, me ajudou bastante quando eu tava começando a programar e ta ajudando outros ainda, otimo professor e me ensinou algo que na minha opinião é essencial um bom programar saber, LÓGICA !  
 
  
 |  
|   | 
 |    |  
| Phonix2000 | Data: Terça, 29/03/2011, 7:39 PM | Mensagem # 4 |  
| 
 Criador Iniciante 
Grupo: Usuários 
Mensagens: 323 
Awards:  2 
Reputação:  12 
Status: Offline 
 
 | legal e fácil, nada complicado, eu uso condicional sem saber :P   outra coisa, o "meio" do tutorial fico muito junto e enrolado e usar emoticon ( ^^ ) nesse tutorial não ajuda muito,   pois existe um comando semelhante e pode confundir leigos. 
 
      
 |  
|   | 
 |    |  
| OIlusionista | Data: Sexta, 22/04/2011, 7:23 PM | Mensagem # 5 |  
| 
 Editor 
Grupo: Usuários 
Mensagens: 180 
Awards:  0 
Reputação:  7 
Status: Offline 
 
 | posso fazer um comentário?   Repare na linha em bold.    Quote [State X, ChangeState]   Type = ChangeState   Trigger1 = AnimTime = 0    Value = 205+(Command = "holdfwd")   Ctrl = 0    É melhor utilizar esse trigger como:    Quote trigger1 = !AnimTime    Basicamente, quer dizer a mesma coisa (o ! é um símbolo de negação): quando o tempo da animação (AnimTime) for zero.   A diferença é que utilizando como !AnimTime torna esse trigger booleano ao passo que AnimTime = 0 é do tipo string.   Pode parecer besteira, mas não é:   Um trigger booleano funciona checando se algo é verdadedeiro(true) ou falso(false). Valores diferente de 0 são TRUE, ao passo que o valor zero é FALSE.   Então, no nosso caso, ele checa se é falso e "triga" (aciona) o código em questão.   Mas pq é melhor usar booleano?   Pq triggers booleanos são mais rápidos do que do tipo string e são executados primeiro.   Comparando ambos, percebemos o pq:   Trigger1 = AnimTime = 0      Quer dizer: Cheque o Tempo da Animação (digamos "n") e veja se "n" for igual a 0, então execute.   Trigger1 = !AnimTime   Quer dizer: Cheque se o Tempo de Animação é falso.   trigger (gatilho) Booleano é mais rápido pq apenas checa se é falso ou verdadeiro, pra ele tanto faz o valor se for verdadeiro. Se for 1, ou se for 81768237126837123, será verdadeiro do mesmo jeito. Se não, é falso.   Ao passo que trigger por string :   tem que checar o valor do que vc pede,   armazenar o valor,   comparar se o valor armazenado é igual (já que estamos usando "=") ao valor que passamos.   Isso não vale só para Mugen, vale par toda linguagem de programação que trabalhar com booleano.   Espero ter ajudado. 
  Beeing here since 1999    
 |  
|   | 
 |    |  
| SonSon3000 | Data: Sexta, 22/04/2011, 7:27 PM | Mensagem # 6 |  
| 
 Aprendiz Destaque 
Grupo: Mugen News 
Mensagens: 100 
Awards:  0 
Reputação:  4 
Status: Offline 
 
 | hey ilu, então:   trigger1 = !(StateNo = [5000,5999])  seria executado mais rápido que:   trigger1 = StateNo != [5000,5999]   ???   eu sempre levei em conta isso, pq além de deixar mais rápida a execução de leitura, tbm fica mais "exótico" e bonito o código =). 
  Visitem o meu cantinho do mugen:  SonSon3000 - NEWS  
   *Projetos, Lançamentos, Tutoriais, News e outros*
 |  
|   | 
 |    |  
| OIlusionista | Data: Sexta, 22/04/2011, 7:37 PM | Mensagem # 7 |  
| 
 Editor 
Grupo: Usuários 
Mensagens: 180 
Awards:  0 
Reputação:  7 
Status: Offline 
 
 | Então, vc precisa tomar cuidado com isso:   1- O mais rápido estamos falando em linguagem de máquina. Entao o tempo é muito rápido, não será coisa que vc conseguirá ver. Mas ajuda o processamento.   2- Precisa tomar cuidado com malformação de triggers. Seu trigger:    Quote trigger1 = !(StateNo = [5000,5999])    Funciona. Mas se vc utilizar isso num helper:   trigger1 = root,!(StateNo = [5000,5999])   Não funciona, pois está mal formado.   O certo seria:   trigger1 = !(root,StateNo = [5000,5999])   pq aí eu nego tudo que está dentro do parenteses.   3- O Mugen tem um bug bobo no controle de triggers booleanos.   Se vc usar:    Quote trigger1 = !Ctrl && Time = [0,40]    Ele acusa erro, pois vc está checando um valor booleano e um intervalo (no time) na mesma linha.   Mas se vc fizer isso:    Code trigger1 = !ctrl   trigger1 = Time =[0,40]    Funciona. E quer dizer a mesma coisa*   *vou fazer um post em breve sobre isso. 
  Beeing here since 1999    
 |  
|   | 
 |    |  
| SonSon3000 | Data: Sexta, 22/04/2011, 8:22 PM | Mensagem # 8 |  
| 
 Aprendiz Destaque 
Grupo: Mugen News 
Mensagens: 100 
Awards:  0 
Reputação:  4 
Status: Offline 
 
 | sim, ele tem esse erro tbm por causa dos valores de intervalo   tipo: time = [0,10]    ou: time [0,10)   etc  dae se tu botar ele junto com outro argumento unidos por && (e), dá esse erro :)   dai pra concertar, usasse os parenteses para deixar de forma booleana \o/   e sim, sobre helper eu ja sabia disso, mas é ótimo vc dizer isso, daí quem ler esse tópico não comete esses errinhos básicos né?? =D   ah, imagina quando tu quer dizer que a var(0) é igual a 5, em booleano??   trigger1 = (var(0)=5)   ou:   trigger1 = !(var(0)!=5)   HUEHUEHHE 
  Visitem o meu cantinho do mugen:  SonSon3000 - NEWS  
   *Projetos, Lançamentos, Tutoriais, News e outros*
 |  
|   | 
 |    |  
| OIlusionista | Data: Sexta, 22/04/2011, 10:54 PM | Mensagem # 9 |  
| 
 Editor 
Grupo: Usuários 
Mensagens: 180 
Awards:  0 
Reputação:  7 
Status: Offline 
 
 | Code dae se tu botar ele junto com outro argumento unidos por && (e), dá esse erro :)    dai pra concertar, usasse os parenteses para deixar de forma booleana \o/    Na verdade, basta vc usar duas linhas como trigger1 que funciona :) Estranho, não?    Code trigger1 = !(var(0)!=5)    Nao testei, mas nao deve funcionar, pq vc ta usando uma logica recurssiva (ou eliptica).   Veja:   Var(0)!=5 : a var 5 tem qualquer valor que não seja 5.   !(var(0)) está negando a var(0).   Ou seja: vc está negando que a var(0) seja diferente de 5....entao ela é 5 :) 
  Beeing here since 1999    
 |  
|   | 
 |    |  
| SonSon3000 | Data: Sexta, 22/04/2011, 11:44 PM | Mensagem # 10 |  
| 
 Aprendiz Destaque 
Grupo: Mugen News 
Mensagens: 100 
Awards:  0 
Reputação:  4 
Status: Offline 
 
 | Quote (OIlusionista) Na verdade, basta vc usar duas linhas como trigger1 que funciona :) Estranho, não?      é, bem estranho =p   uma coisa que poderia ser simples.   mas se for tipo:   trigger1 = (time = [0,10]) && p2movetype != L   tbm funciona :)   Quote (OIlusionista) Ou seja: vc está negando que a var(0) seja diferente de 5....entao ela é 5 :)      sim, essa foi a intenção =p   acho q daria certo sim, mas não sei se levaria mais tempo ou menos, para o mugen processar essa informação :)
  Visitem o meu cantinho do mugen:  SonSon3000 - NEWS  
   *Projetos, Lançamentos, Tutoriais, News e outros*
 |  
|   | 
 |    |  
| OIlusionista | Data: Sábado, 23/04/2011, 0:08 AM | Mensagem # 11 |  
| 
 Editor 
Grupo: Usuários 
Mensagens: 180 
Awards:  0 
Reputação:  7 
Status: Offline 
 
 | vou fazer um post em breve sobre otmização. Vc verá que nem sempre "codigos exoticos" quer dizer um bom código.
  Beeing here since 1999    
 |  
|   | 
 |    |  
| SonSon3000 | Data: Sábado, 23/04/2011, 0:45 AM | Mensagem # 12 |  
| 
 Aprendiz Destaque 
Grupo: Mugen News 
Mensagens: 100 
Awards:  0 
Reputação:  4 
Status: Offline 
 
 | hehe   vai ser de grande valia.   =D
  Visitem o meu cantinho do mugen:  SonSon3000 - NEWS  
   *Projetos, Lançamentos, Tutoriais, News e outros*
 |  
|   | 
 |    |     
		
		  
 |