Yo pessoal! Vim aqui hj falar sobre as expressões no MUGEN q muita gente desconhece! Vou começar falando sobre números inteiros e decimais! Primeiramente, todos aqui devem saber o que é um número inteiro e um número decimal, mas muita gente não sabe, para o MUGEN, o número 5 é diferente do número 5.0 por exemplo, pois 5 é um número inteiro e 5.0 é um número decimal. O MUGEN dá suporte para números decimais de até 7 casas decimais, por exemplo: 6.2748164 Segundo, eu estarei falando de valor 1 e 0 aqui, então vou explicar como os Triggers funcionam. Se o valor do Trigger for 1, então o Trigger vai ativar, se for 0, então ele não vai ativar! Por isso, quando colocamos Trigger1 = 1 o trigger será sempre ativado, pois sempre vai valer 1, mas se colocarmos Trigger1 = Time = 10, o Trigger irá valer 1 somente quando o Time for 10. Dado essa breve introdução, vamos falar das expressões em sí:
+ Operador de adição que todos conhecem, ele faz a soma de dois números. A soma de dois números inteiros resulta em um número inteiro, a soma de dois números decimais resulta em um número decimal, a soma de um número inteiro com um número decimal resulta em um número decimal com perca de precisão nas casas decimais.
- Operador de subtração também conhecida por todos, ele subtrai um número de outro. Em questão de números inteiros e decimais, ele obedece a mesma regra da adição.
* Operador de multiplicação, ele multiplica dois números. Em questão de números inteiros, obedeca a mesma regra da adição.
/ Operador de divisão, faz a divisão de um número por outro. Se os dois números forem inteiro, o resultado é a parte inteira da divisão, por exemplo, 7/2 é 3.5, mas o resultado obtido será apenas 3, se ambos os números foram decimais, o resultado será um número decimal, por exemplo, 7.0/2.0 possui resultado 3.5, se um dos valores for inteiro e outro decimal, o valor inteiro será convertido para decimal e o resultado poderá perder precisão de casas decimais.
% Operador de divisão, ele faz a divisão apenas de números inteiros, mas o resultado é o resto da divisão, por exemplo, 7%2 terá resultado 1, pois 7/2 dá 3 e o resto é 1.
** Operador de potenciação, ele eleva um número a uma determinada potência, com relação a números inteiros e decimais, ele obedece a regra da adição.
= Operador de igualdade, ele analisa duas expressões e, caso sejam iguais, retorna o valor 1, do contrário, retorna o valor 0, por exemplo, a expressão (1+5 = 7-1) vai resultar em 1, pois 1+5 = 6 e 7-1 = 6, então 6 = 6. Com relação a números inteiros e decimais, ele obedece a regra da adição.
!= Operador de desigualdade, ele analisa duas expressões e, caso sejam diferentes, retorna o valor 1, do contrário, retorna o valor 0. Com relação a números inteiros e decimais, ele obedece a regra da adição.
< Operador de desigualdade, ele analisa duas expressões e, caso a primeira seja menor que a segunda, retorna o valor 1, do contrário, retorna o valor 0. Com relação a números inteiros e decimais, ele obedece a regra da adição.
<= A mesma coisa que "<", mas ele analisa se o primeiro é menor que o segundo ou se eles são iguais.
> Operador de desigualdade, ele analisa duas expressões e, caso a primeira seja maior que a segunda, retorna o valor 1, do contrário, retorna o valor 0. Com relação a números inteiros e decimais, ele obedece a regra da adição.
>= A mesma coisa que ">", mas ele analisa se o primeiro é maior que o segundo ou se eles são iguais.
:= Operador de atribuição, ele atribui um determinado valor a uma variável, ele funciona como um VarSet ou VarAdd resumido. Com relação a números inteiros e decimais, ele obedece a regra da adição. Exemplo para o ":="
Esse código irá funcionará como um VarAdd para a variável 15, adicionando 1 nela a cada Game-Tick e também funcionará como um VarSet para a variável 16, introduzindo o valor 1 nela.
[,] (,) [,) (,] Intervalo, ele analisa 3 números, o primeiro é o q está antes do operador de igualdade ou desigualdade, os outros dois são os valores limites do intervalor. Os colchetes definem que os valores limites estão no intervalo e os parênteses definem que os valores limites não estão no intervalo. Por exemplo, Time = [30, 60) irá retornar o valor 1 caso o Time esteja entre 30 e 59, pois 60 não está definido no intervalo.
! Operador lógico "NÃO", ele retorna o valor 1 caso a expressão na frente dele seja falsa, do contrário, retorna o valor 0. Por exemplo, Time != 10, irá retornar 1 caso o Time NÃO seja 10.
&& Operador lógico "E", ele retorna o valor 1 caso as duas expressões sejam verdadeiras, do contrário, retorna o valor 0. Por exemplo, Time = 10 && AnimElem = 2, irá retornar caso Time seja 10 E se AnimElem for 2, ambos as afirmações devem ser verdadeiras ao mesmo tempo para que o valor seja 1.
|| Operador lógico "OU", ele retorna o valor 1 caso pelo menos uma das duas expressões sejam verdadeiras, do contrário, retorna o valor 0. Por exemplo, Time = 10 || AnimElem = 2, irá retornar caso Time seja 10 OU se AnimElem for 2, pelo menos uma das afirmações devem ser verdadeiras para que o valor seja 1, note que se as duas expressões forem verdadeiras o valor também será 1.
^^ Operador lógico "OU EXCLUSIVO", ele retorna o valor 1 caso uma das duas expressões sejam verdadeiras, do contrário, retorna o valor 0. Por exemplo, Time = 10 ^^ AnimElem = 2, irá retornar caso OU Time seja 10 OU se AnimElem for 2, apenas uma das afirmações deve ser verdadeira para que o valor seja 1, note que se as duas expressões forem verdadeiras, o valor será 0.
Ordem do cálculo das expressões: Assim como na matemática existem ordem para os cálculos, no MUGEN também tem! Caso dois operadores possuam a mesma ordem de cálculo, a fórmula é analisada da esquerda para a direita. Caso você queira alterar a ordem de cálculo, será necessário o uso dos parênteses. A ordem é a seguinte: 1º ! 2º ** 3º * / % 4º + - 5º > >= < <= 6º = != intervalos 7º := 8º && 9º ^^ 10º ||
Um exemplo do uso dos parênteses seria o seguinte: 2+3*5 resultaria em 17, pois a multiplicação vem primeiro e depois vem a soma (2+3)*5 resultaria em 25, pois o parênteses alterou a ordem para que a soma viesse primeiro.
Sintáxe das expressões Basicamente, qualquer operador pode ser utilizado em uma expressão. Um exemplo seria a seguinte expressão: 1.0 = (2 = (1 > 0) + !(1 < 0)) O termo 1>0 irá retornar o valor 1, o termo 1<0 retornaria o valor 0, mas como existe a negação transformando o termo !(1<0), o valor será 1, então a expressão se resume em 1.0 = (2 = 1 + 1) Veja que 2 = 1 + 1, então essa parte irá retornar o valor 1, e também, como o número da esquerda é decimal, o número da direita será convertido para decimal, ficando: 1.0 = 1.0
Note que os únicos operadores que podem operar sobre intervalo são "=" e "!=", assim, a expressão 5 > [0,2] ou 4 + [1,4) não é permitido.
Enfim, essas expressões podem vir a ser muito útil! Eu mesmo não sabia o que significava o %
Um exemplo da utilização do % que eu uso com certa frequência é para fazer randomização simplificada...
Por exemplo:
Code
[State 200, End] Type = ChangeState Trigger1 = AnimTime = 0 Value = 201+(Random%5) Ctrl = 0
Note a expressão 201+(Random%5) Para explicá-la, os restos da divisão de um número por 5 podem ser 0, 1, 2, 3 ou 4, o Random varia de 0 a 999 Então dependendo valor que Random assumir, ele irá ser dividido por 5 e o resto dessa divisão será somado ao 201 Assim, o Value irá variar entre 201 e 205
Enfim, espero que essas informações possam ser úteis para vocês o/
cara, ótimas dicas!!! o/ muitos iniciantes até sabem fazer calculos básicos com adição,subtração, multiplicação e divisão, mas o resto é muito importante para os iniciantes saberem, pq eles poderam usar isso frequentemente num char um pouco mais avançado.
enfim, ficou ótimo e bem explicativo esse tópico!!! :) abraço!
puts mano, muito show tudo isso =D só nao conhecia a "atribuiçao" ali, acho q se tu me explico, no msn, nao prestei atençao, ou seila. muito bom msms manolo, bem, explicado e tals xD
flws
davidluanrizi@hotmail.com <-- Se add por favor se identificar o/
pow muito bom cara, eu só sabia sobre os basicos ^^ brigadão man só uma pergunta se colocasse 1.0 = 1.0 como vc mesmo disse que aquilo tudo seria isso ai... então se por acaso eu colocasse esse valor em algum lugar no meu personagem pra fazer certa condição e tals, ele funciona ou tem que fazer esse calculo todo pra funcionar?
só isso a minha duvida .-.
flws thunder e valeu ai cara vou te dar creditos pro resto dos meus chars kkk
uhullll
Satanás está obtendo êxito por meio da televisão de uma forma impossível através de qualquer outro tipo de invasão demoníaca. Por meio desse ídolo que fala, ele pode realizar nesta geração o que realizou no jardim do Éden. Mas os sodomitas estão aqui agora - em nossos lares. E somos agora os cegos. Escritores, atores homossexuais apregoam seu direito maligno bem diante de nossos olhos, e quer você admita ou não, você e todos os outros em sua casa estão debaixo de um ataque sodomita demoníaco. (David Wilkerson)
puts mano, muito show tudo isso =D só nao conhecia a "atribuiçao" ali, acho q se tu me explico, no msn, nao prestei atençao, ou seila. muito bom msms manolo, bem, explicado e tals xD
flws
vlw manolo! e sim, eu expliquei via msn pra vc xD
Quote (SonSon3000)
cara, ótimas dicas!!! o/ muitos iniciantes até sabem fazer calculos básicos com adição,subtração, multiplicação e divisão, mas o resto é muito importante para os iniciantes saberem, pq eles poderam usar isso frequentemente num char um pouco mais avançado.
enfim, ficou ótimo e bem explicativo esse tópico!!! :) abraço!
vlw ae ^^
Quote (Naruto_MD)
pow muito bom cara, eu só sabia sobre os basicos ^^ brigadão man só uma pergunta se colocasse 1.0 = 1.0 como vc mesmo disse que aquilo tudo seria isso ai... então se por acaso eu colocasse esse valor em algum lugar no meu personagem pra fazer certa condição e tals, ele funciona ou tem que fazer esse calculo todo pra funcionar?
só isso a minha duvida .-.
flws thunder e valeu ai cara vou te dar creditos pro resto dos meus chars kkk
uhullll
Vlw ae MD *_* Tipo, usar esse exato code 1.0 = (2 = (1 > 0) + !(1 < 0)) ou 1.0 = 1.0 é a mesma coisa, mas a razão dessas expressões é pra você poder calcular usando triggers ^^ E nem precisa créditos manolo, nem é code pronto e talz, foi só um resumo das expressões q tem nos docs do MUGEN xD
Quote (Bruno_SS)
Muito BOM, mas num entendi algumas coisas, fora isso, isso é funfa em qualquer mugen?!!!!!!
Suponhamos q eu quero um golpe q queira dar vários hits em momentos diferentes, ao invés de colocar vários triggers, eu poderia usar Trigger1 = Time = [25,50] || Time = [75,100] Nesse caso, ele ativaria o golpe entre os tempos 25 e 50 e também entre 75 e 100 Ou eu posso usar ainda Trigger1 = (Random%5 = 0) && (Time = (74,101)) Nesse caso, ele teria uma probabilidade de 20% de chance de acontecer enquanto estiver entre os tempo 75 e 100, pq 74 e 101 não estão incluído no intervalo. Com números inteiros, usar o intervalo com parênteses pode ser algo meio inútil, mas com números reais, veja que 74.1 estaria incluido, mas 74 naum, assim como 100,9999999 estaria incluido, mas 101 não... Espero que tenha entendido
Edit: Um outro exemplo seria fazer uma chance q aumenta de acordo com o tempo, por exemplo: Trigger1 = (Random/10) <= (Time = [35,100])
No caso, Random varia de 0 a 999, dividindo ele por 10, ele varia entre 0 e 99 Então, no caso, a chance de acontecer o golpe é de 35% no Time = 35 e chega a 100% de chance no Time = 100
Enfim, conhecendo as expressões, as opções de programação aumentam muito ^^
bem explicado man tem algumas coisas que eu n sabia ai ^^ algumas coisas sao meio complexas, mais eh so pega o jeito vlw por posta \o ------------------------------------Projetos---------------------------------------
\o/ legal mesmo já sabendo é bom da uma lida, eu aprendi coisas novas \o
| é a mesma coisa que || né?
Vlw *_*
Tipo, | não é a mesma coisa que || Pois o | analisa os valores binários ao invés de analisar a expressão em sí...
Assim como ~ seria o !, o & seria o && e ^ seria ^^ Eles possuem o mesmo significado, mas eles analisam os valores binários das expressões, cujo qual eu acredito que não é muito útil... Sem contar que esses sinais de valores binários transformam todos os valores da expressão em decimais, o q as vezes pode ser ruim... E também, essas expressões possuem ordem de cálculo diferente... 1º ! ~ 2º ** 3º * / % 4º + - 5º > >= < <= 6º = != intervalos 7º := 8º & 9º ^ 10º | 11º && 12º ^^ 13º ||
Enfim, espero q essas informações tb sejam úteis ^^
Edit: Para mais informações sobre essa parte de operadores que analisam a parte binária, tem no Wikipédia Bitwise (em inglês)
Enfim, espero q essas informações tb sejam úteis ^^
concerteza, meu guile ta ficando locão agora =D to usando esse artificio ai pra complicar a codificação -q
valu de novo thunder e brigado por exlpicar minha duvida la flws cara e parabens ^^
Satanás está obtendo êxito por meio da televisão de uma forma impossível através de qualquer outro tipo de invasão demoníaca. Por meio desse ídolo que fala, ele pode realizar nesta geração o que realizou no jardim do Éden. Mas os sodomitas estão aqui agora - em nossos lares. E somos agora os cegos. Escritores, atores homossexuais apregoam seu direito maligno bem diante de nossos olhos, e quer você admita ou não, você e todos os outros em sua casa estão debaixo de um ataque sodomita demoníaco. (David Wilkerson)
sempre usei o | ao invés de || nunca me deu dor de cabeça, pois para mim a função final em si da na mesma.
Quando eu li isso, eu sabia que estava errado, mas como eu nao domino essa parte, fui perguntar pra quem sabe.
Palavras do VirtuallTek:
Operadores bitwise (casamento de bit com bit)
| = ou ex.: 01000110 | 11001010 = 11001110 ou seja, quando um dos bits for 1, o retorno é 1, se os dois forem zero o retorno é 0
& = e ex.: 01000110 & 11001010 = 01000010 ou seja, quando os dois bits forem 1, o retorno é 1, se um dos dois for zero o retorno é 0
^ = ou exclusivo ex.: 01000110 | 11001010 = 10001100 ou seja, quando os bits forem diferentes, o retorno é 1, se forem iguais o retorno é 0
~ = negação ex.: ~ 01000110 = 10111001 ou seja, se o bit for 0 returna 1, se for 1 retorna 0
Operadores lógicos (famoso verdadeiro e falso)
valor > 0 = verdadeiro valor é 0 = falso
|| = ou ex.: 20 || 0 = 1 (verdadeiro)
&& = e ex.: 20 && 0 = 0 (falso)
Diferença
0 & 55 = 0 0 && 55 = 0
12 & 55 = 4 12 && 55 = 1
55 | 0 = 55 55 || 0 = 1
Se for usado em uma operação lógica, o resultado é o mesmo porque valor > 0 = verdadeiro Se for usado em um cálculo aritmético o resultado é diferente
Agora, a dica: nas situações que sabe-se que será retornado o mesmo valor, é preferível usar bitwise, por ser executado mais rápido EDIT: Dependendo do número de expressões. ex.: (var1 == 0) || (var2 == 55) || (var3 < 30) Se a var1 é 0, o restante não precisa ser executado. Ai outra otimização é sempre colocar a situação mais provável primeiro.