
Leinad4Mind
- Respostas: 72
- Mensagens: 12075
- Registado: 25 jan 2012, 15:05
- Fansub: MangAnime
- Gender:
- PontosGold: 756,837.00
- 03 ago 2013, 17:54
#128490
Mais um tutorial da minha parte, finalmente irei partilhar todos os meus conhecimentos (que vale o que vale lol) ganhos em 8 anos de fansubbing, a minha retirada definitiva poderá estar para breve, e quero ver anime descansado no meu sofá e queria muito vê-lo com qualidade, e como tal, sinto que tenho o dever de transmitir os meus conhecimentos, que foram adquiridos através de muito esforço e horas perdidas e directas, com quem tem sede de aprender. Quando comecei senti falta de ter tuturiais sobre diversos assuntos de fansubbing, como tal não quero que passem pelo mesmo.
Desta vez será sobre como fazer efeitos em LUA4 fazendo uso da LeinadCollection, que é uma colecção de funções que irá facilitar a criação de efeitos.
Irei tentar explicar da melhor forma possível para que não surjam dúvidas. Sobre a LeinadCollection não se preocupem que também irei explicar. Não explicarei as Expressões de .ass, porque isso é o básico e deverão aprender antes de ler este tutorial, para poder compreender os Efeitos.
Antes de mais vou ensinar a fazer uso de cores e tipos de letra nos karaokes, é que por melhor que seja o efeito... basta usar cores que causam cancro visual ou derrame ocular para tornar o karaoke numa valente porcaria. E são esses 2 factores que espero que dêem valor.
O tipo de letra a escolher tem de se adaptar ao vídeo, tem de parecer que faz parte do meio ambiente do vídeo em questão, tem de ter personalidade. E não é escolher a primeira fonte que apareça, ou usar uma fonte que seja bonita, embora não se relacione com o vídeo em questão. E este é o primeiro e mais importante factor. Porque o aspecto visual conta e muito. Após termos escolhido o tipo de letra, passamos à escolha de cores. Pode parecer que não, mas tem bastante importância, visto que faz parte do aspecto visual. E as cores tal como o tipo de letra, tem de ser uma espécie de camaleão e representar o vídeo. Para a sua escolha, basta usar-se as cores que mais predominam no vídeo. Dito isso, há que ter em atenção à combinação da cor da borda com a cor do interior. É que já vi bordas verdes com interiores cor-de-rosa, ou mesmo borda a azul-marinho com interior ciano e sombra a branco, e garanto-vos que irá fazer-vos literalmente sangrar dos olhos xD. O interior, na maioria dos casos, tem de ser uma cor mais suave/pálida e a borda normalmente fica bem algo mais escuro, e caso não se coloque borda alguma e ao invés se usar sombra, esta também terá de ser com cores mais escuras que o interior. Embora haja algumas excepções.
São apenas os meus conselhos. Agora passo aos exemplos:
Como podem ver, a 1ª imagem é um exemplo de "cancro visual", visto que as cores que foram usadas foram as básicas, nem o raio da ferramenta da "Gota" foi usado.
No 2º caso, é notório a boa combinação de cores que nos dá um melhor contraste visual.
Refiro também que o alinhamento do karaoke também tem a sua importância. Apesar de para muitos ser insignificante, há casos em que fica melhor alinhado à esquerda do que ao centro. Mas também é um pouco de gosto pessoal.
Para terminar, ao trabalharem com figuras, há que ter consciência das cores, borda e/ou sombras usadas, visto que há figuras também com cores muito vibrantes ou que realçam demasiado das cores escolhidas para o karaoke em si, e isso é apenas outra variante de cancro visual.
No primeiro caso, as pétalas amarelas não combinam com a legenda e força a vista. Outro ponto a ter em conta, nesse 1º exemplo, é o tamanho da borda da figura, na maioria dos casos, esse incluído, até é preferível nem usar. O 2º exemplo mostra claramente que ficaria melhor sem borda, visto que é uma pétala. Outro caso é em flocos de neve, e por incrível que pareça cheguei já a ver em alguns vídeos, flocos de neve com bordas, o que arruinou o karaoke por completo.
Escusado dizer que o 3º exemplo é uma das cores acertadas para uma pétala que se assemelha às "sakura".
Após esta pequena aula de fazer ver a importância da combinação das cores com as bordas e/ou sombras, do alinhamento e do tamanho das bordas/sombras, vou passar às explicações de como criar scripts LUA fazendo uso da LeinadCollection.
Está na horinha de criar o nosso primeiro script em LUA (saudades... até dá vontade de chorar xD), e para isso vamos precisar da e partilho também um complemento dessa biblioteca que se destina apenas a simplificar o uso de formas, a . Uma vez em nossa posse, colocamos ambos os ficheiros na pasta Aegisub\automation\include. Depois de instalada, iremos transferir o seguinte e o seguinte programa: .
Antes de mais, irei explicar o que consiste a "leinadcollection.lua". É uma biblioteca de funções criada por mim, com base em diversas, para simplificar a forma de se fazer os efeitos, e foi graças a diversas pessoas ao longo do tempo que isto começou a ganhar forma e se tornou no que hoje é, não passava de um conjunto de funções espalhadas num txt. Com esta ferramenta o trabalho é muito menor, logo melhor do que o método normal (antigo) que seria usar-se "String.Format", mas que confundia sempre um pouco aquando da declaração de variáveis. Deixo já de seguida a diferença entre ambos os métodos, como se usava antes (método normal), e o que se usa com a leinadcollection (método melhorado).
Dando um exemplo... actualmente, se quiséssemos fazer um efeito, teríamos de escrever isto:
Com a leinadcollection, apenas é necessário:
Como podem reparar e bem, apesar de ser muito idêntico, facilita a escrita e leitura/visualização dos efeitos.
Não temos o horrível string.format, não temos as \\, os pontos tornam tudo mais legível.
A declaração das variáveis em vez de termos %d ou %s para depois termos as variáveis correspondentes no fim que fica complicado de compreender e escrever, com esta leinadcollection fica muito mais legível e simples de escrever, pois passam a ser funções como ..pos(x,y)
Agora, vamos lá tentar criar o nosso primeiro efeito. Depois de ambos os ficheiros estarem em nossa posse, instalámos o Notepad++ e abrimos o aula_basica.lua.
A vantagem de usar o Notepad++ é principalmente por ele colorir o código, o que torna mais fácil de ler e compreender. (Podem usar outro programa tal como Visual Studio Code, Atom ou Sublime)
Ao ver o script, peço-vos que não se assustem e que não desistam, porque pode parecer complicado, mas não o é, e facilmente se adaptam.
E é o suficiente para poder adicionar o nosso ficheiro LUA à "Automatização" do Aegisub, visto já ter nome e descrição.
De seguida vem a nossa Macro:
Essa função serve para elegermos qual o Estilo a que o Efeito será aplicado (Ver linha 32). Neste exemplo estamos a aplicar ao estilo "Default" e "Karaoke", se desejarmos aplicar a mais estilos não tem nada que saber, basta meter "or" seguido de l.style == "ESTILO" (Em ESTILO, é óbvio que colocarão o nome do outro estilo que pretendem adicionar). Exemplo: (l.style == "Default" or l.style == "Karaoke" or l.style == "Opening") then.
Esta função cria a Macro que aplica os nossos efeitos aos karaokes:
Todo o resto do código, não tem assim muito mais importância. Continuemos para o código seguinte:
A função do_fx obtém/captura os dados no nosso ficheiro .ass. Pode-se ver um ciclo for, para quem não sabe, os ciclos usam-se quando queremos repetir diversas vezes uma parcela de código, no nosso contexto desejamos repetir para a quantidade de sílabas existentes em todo o nosso karaoke e para isso usaremos line.kara.n, visto ser uma variável que nos diz a quantidade de sílabas por linha. Depois temos a declaração de algumas variáveis para facilitar a escrita do código, temos a nossa sílaba syl, e as posições x e y (De notar que no alinhamento vertical, ou seja, y, o 25 é o número de pixeis em relação à margem, se aumentarem esse valor a linha do karaoke irá descer). E por fim temos a nossa função sil, que serve para escrever as nossas sílabas no nosso .ass final.
Agora temos vários blocos de código, todos eles relativos a efeitos, e estão agrupados por ordem de tempo, ou seja, por ordem que serão exibidos no ecrã: EFEITO DE ENTRADA-SÍLABAS ESTÁTICAS-EFEITO DAS SÍLABAS-EFEITO DE SAÍDA. Cada bloco possui uma linha que corresponde ao efeito, outra ao tempo de entrada, outra ao tempo de saída e outra sobre o nível da camada. Este último é importante quando queremos sobrepor um efeito sobre outro, visto que é para isso que serve as camadas, o maior número, sobrepõe-se às outras.
Basta ler o código seguinte que está comentado, para entenderem o que cada linha realmente representa:
Estes registos servem para que a macro surja tanto na Automatização (aegisub.register_macro) como também na exportação de legenda (aegisub.register_filter).
E assim finalizo a aula básica onde expliquei a estrutura do script. Na próxima parte, irei aprofundar o essencial, porque é natural que ainda existam dúvidas sobre o que é o syl.start_time, l.style, e por aí adiante. Podem também ler o para entender ainda melhor todo o código que provavelmente nem sequer irei mencionar.
Nesta parte as coisas começarão a ser mais "pesadas". Quem cursa informática ou esteja à vontade com linguagens de programação, não terá dificuldade alguma. E quando digo "pesada", é porque teremos de aprender diversas funções e nomes de variáveis que servem para se fazer os efeitos. Começarei por detalhar a linguagem Lua e só depois irei focar nas coisas fundamentais do Aegisub.
Linguagem LUA
Símbolos: São muito frequentes e é natural que temos de os conhecer para sabermos realizar operações matemáticas.
Função: As funções são criadas para nos poupar trabalho. E claro são necessárias se não queremos repetir sempre o mesmo código, então se houvesse um erro, teria de se corrigir em todas as repetições de código, e desta forma só se corrige a função.
Exemplo:
if – else – not – elseif: A condição if verifica se algo é verdadeiro ou falso. O if apenas nos devolve um valor True (verdadeiro) e um valor False (falso) que podemos definir se usarmos o else.
Exemplo 1:
Exemplo: Se fosse 5, continuaria a ser 5, mas se fosse 10, seria alterado para 20, porque foi isso que definimos no valor TRUE.
Exemplo 2:
Podemos também usar if nas funções e executar um not, onde aplicaremos se não existir um valor declarado na função. Pode ser muito útil, como podemos ter de considerar o seu uso.
Exemplo 3:
Por último, temos um elseif que dá-nos a possibilidade de criar outra opção "True/False".
Exemplo 4:
for – while: Estes dois são estruturas de repetição, quero dizer com isso que podemos repetir X quantidade de vezes o código nele contido. O for é o mais usado para se fazer efeitos, visto que é mais rápido e simples.
Exemplo 1:
5+1=6, 5+2=7, 5+3=8, 5+4=9, 5+5=10. O valor a vermelho é o valor de j, que vai de 1 a 5.
O while é bem mais distinto, visto que temos de criar antes uma variável de incrementação que tem de ser menor que a quantidade a se repetir.
Exemplo 2:
local – do – then – end – and – or: Quando usámos local, o que estamos a dizer é que iremos executar apenas de maneira local e não global. Normalmente as variáveis declaradas como local podem apenas ser usadas dentro das funções onde foram declaradas, e fora dessa função essa variável nem sequer é reconhecida, só se fosse global. O do é usado para iniciar um ciclo e o then para iniciar o if ou o elseif. O end é usado para dar um fim a alguma função ou ciclo ou condição. E por fim o and e o or são usados para dar mais alternativas nas condições if.
Exemplo:
Biblioteca math: Esta biblioteca que vem incluída na linguagem Lua, serve para fazermos cálculos matemáticos, daí o math x'D. Existem várias funções math, mas apenas irei falar de alguma delas, as mais usadas para os efeitos de karaoke. A primeira será math.random, que nos dá um número aleatório de acordo com os limites estabelecidos. O primeiro valor tem de ser menor que o segundo e pode ser um valor negativo. Este math fazendo uso da leinadcollection passa a ser rque é uma função que faz uso delaso dela.
Exemplo 1:
Agora falarei de math.ceil e math.floor, que nos serão úteis quando formos trabalhar com números reais. O math.ceil obtém o maior inteiro, enquanto que com o math.floor se obtém o menor inteiro.
Exemplo 2:
Sobre o math.cos e math.sin, que serve para obtermos o coseno e o seno de algum ângulo.
Exemplo 3:
Arrays: Os arrays são uma espécie de armazém onde podemos guardar informação, tanto letras, como números, inclusive variáveis como outros arrays. Eles são muito úteis já que ao guardarmos informação podemos utilizá-la quando quisermos e de uma forma simples.
Exemplo 1:
Outra coisa interessante nos arrays é que podemos usá-lo juntamente com funções math, como math.random ou rand() e obter resultados aleatórios, o que o torna muito útil se o array for de cores ou números.
Exemplo 2:
E com isto dou por terminado esta parte do tutorial que visava ensinar um pouco de programação, para se sentirem mais à vontade quando forem escrever funções para criar karaokes.
Desta vez será sobre como fazer efeitos em LUA4 fazendo uso da LeinadCollection, que é uma colecção de funções que irá facilitar a criação de efeitos.
Irei tentar explicar da melhor forma possível para que não surjam dúvidas. Sobre a LeinadCollection não se preocupem que também irei explicar. Não explicarei as Expressões de .ass, porque isso é o básico e deverão aprender antes de ler este tutorial, para poder compreender os Efeitos.
Antes de mais vou ensinar a fazer uso de cores e tipos de letra nos karaokes, é que por melhor que seja o efeito... basta usar cores que causam cancro visual ou derrame ocular para tornar o karaoke numa valente porcaria. E são esses 2 factores que espero que dêem valor.
O tipo de letra a escolher tem de se adaptar ao vídeo, tem de parecer que faz parte do meio ambiente do vídeo em questão, tem de ter personalidade. E não é escolher a primeira fonte que apareça, ou usar uma fonte que seja bonita, embora não se relacione com o vídeo em questão. E este é o primeiro e mais importante factor. Porque o aspecto visual conta e muito. Após termos escolhido o tipo de letra, passamos à escolha de cores. Pode parecer que não, mas tem bastante importância, visto que faz parte do aspecto visual. E as cores tal como o tipo de letra, tem de ser uma espécie de camaleão e representar o vídeo. Para a sua escolha, basta usar-se as cores que mais predominam no vídeo. Dito isso, há que ter em atenção à combinação da cor da borda com a cor do interior. É que já vi bordas verdes com interiores cor-de-rosa, ou mesmo borda a azul-marinho com interior ciano e sombra a branco, e garanto-vos que irá fazer-vos literalmente sangrar dos olhos xD. O interior, na maioria dos casos, tem de ser uma cor mais suave/pálida e a borda normalmente fica bem algo mais escuro, e caso não se coloque borda alguma e ao invés se usar sombra, esta também terá de ser com cores mais escuras que o interior. Embora haja algumas excepções.
São apenas os meus conselhos. Agora passo aos exemplos:


No 2º caso, é notório a boa combinação de cores que nos dá um melhor contraste visual.
Refiro também que o alinhamento do karaoke também tem a sua importância. Apesar de para muitos ser insignificante, há casos em que fica melhor alinhado à esquerda do que ao centro. Mas também é um pouco de gosto pessoal.
Para terminar, ao trabalharem com figuras, há que ter consciência das cores, borda e/ou sombras usadas, visto que há figuras também com cores muito vibrantes ou que realçam demasiado das cores escolhidas para o karaoke em si, e isso é apenas outra variante de cancro visual.



Escusado dizer que o 3º exemplo é uma das cores acertadas para uma pétala que se assemelha às "sakura".
Após esta pequena aula de fazer ver a importância da combinação das cores com as bordas e/ou sombras, do alinhamento e do tamanho das bordas/sombras, vou passar às explicações de como criar scripts LUA fazendo uso da LeinadCollection.
Como Fazer Karaoke em LUA - Parte 2
Está na horinha de criar o nosso primeiro script em LUA (saudades... até dá vontade de chorar xD), e para isso vamos precisar da e partilho também um complemento dessa biblioteca que se destina apenas a simplificar o uso de formas, a . Uma vez em nossa posse, colocamos ambos os ficheiros na pasta Aegisub\automation\include. Depois de instalada, iremos transferir o seguinte e o seguinte programa: .
Antes de mais, irei explicar o que consiste a "leinadcollection.lua". É uma biblioteca de funções criada por mim, com base em diversas, para simplificar a forma de se fazer os efeitos, e foi graças a diversas pessoas ao longo do tempo que isto começou a ganhar forma e se tornou no que hoje é, não passava de um conjunto de funções espalhadas num txt. Com esta ferramenta o trabalho é muito menor, logo melhor do que o método normal (antigo) que seria usar-se "String.Format", mas que confundia sempre um pouco aquando da declaração de variáveis. Deixo já de seguida a diferença entre ambos os métodos, como se usava antes (método normal), e o que se usa com a leinadcollection (método melhorado).
Dando um exemplo... actualmente, se quiséssemos fazer um efeito, teríamos de escrever isto:
Código: Selecionar todosGerar urls premium
l = table.copy(line)
l.text = string.format("{\\an5\\pos(%d,%d)\\1c%s\\bord0\\t(\\bord1)}%s",x,y,line.styleref.color2,syl.text_stripped)
l.start_time = line.start_time+tempo
l.end_time = line.start_time+syl.start_time
l.layer=3
subs.append(l)
Código: Selecionar todosGerar urls premium
l = table.copy(line)
l.text = "{"..an(5)..pos(x,y)..estilo(1,line.styleref.color2)..bord(0)..t(bord(1)).."}"..sil()
l.start_time = line.start_time+tempo
l.end_time = line.start_time+syl.start_time
l.layer=3
subs.append(l)
Não temos o horrível string.format, não temos as \\, os pontos tornam tudo mais legível.
A declaração das variáveis em vez de termos %d ou %s para depois termos as variáveis correspondentes no fim que fica complicado de compreender e escrever, com esta leinadcollection fica muito mais legível e simples de escrever, pois passam a ser funções como ..pos(x,y)
Agora, vamos lá tentar criar o nosso primeiro efeito. Depois de ambos os ficheiros estarem em nossa posse, instalámos o Notepad++ e abrimos o aula_basica.lua.
A vantagem de usar o Notepad++ é principalmente por ele colorir o código, o que torna mais fácil de ler e compreender. (Podem usar outro programa tal como Visual Studio Code, Atom ou Sublime)
Ao ver o script, peço-vos que não se assustem e que não desistam, porque pode parecer complicado, mas não o é, e facilmente se adaptam.
include("karaskel.lua")No início do ficheiro inclui-se sempre o "" que é a biblioteca principal do Aegisub para criar efeitos, visto que contém todas as variáveis essenciais para a criação destes. De seguida incluímos a nossa leinadcollection.lua para poder fazer uso das nossas próprias funções de efeitos. O resto do código fala por si.
include("leinadcollection.lua") -- Adicionar Biblioteca
script_name = "Karaoke Teste Básico"
script_description = "Lua4 com LeinadCollection"
script_author = "Leinad4Mind"
script_version = "1.0"
E é o suficiente para poder adicionar o nosso ficheiro LUA à "Automatização" do Aegisub, visto já ter nome e descrição.

De seguida vem a nossa Macro:
Código: Selecionar todosGerar urls premium
function fx_leinad(subs)
aegisub.progress.task("A recolher dados...")
local meta, styles = karaskel.collect_head(subs)
aegisub.progress.task("A aplicar efeito...")
local i, ai, tere, tereai = 1, 1, #subs, #subs
while i <= tere do
aegisub.progress.task(string.format("A aplicar efeito (%d/%d)...", ai, tereai))
aegisub.progress.set((ai-1)/tereai*100)
local l = subs[i]
if l.class == "dialogue" and
not l.comment and
(l.style == "Default" or l.style == "Karaoke") then --Pode-se alterar para o nome do Estilo a que queremos aplicar o efeito, ou adicionar mais estilos.
karaskel.preproc_line(subs, meta, styles, l)
do_fx(subs, meta, l)
tere = tere - 1
subs.delete(i)
else
i = i + 1
end
ai = ai + 1
end
aegisub.progress.task("Terminado!")
aegisub.progress.set(100)
aegisub.set_undo_point("fx_leinad")
end
Esta função cria a Macro que aplica os nossos efeitos aos karaokes:

Todo o resto do código, não tem assim muito mais importância. Continuemos para o código seguinte:
Código: Selecionar todosGerar urls premium
function do_fx(subs, meta, line)
for i = 1, line.kara.n do
local syl = line.kara[i]
local x=syl.center + line.left
local y=line.margin_v + 25
sil(syl) -- Adicionámos a nova função de Sil (Encontra-se na LeinadCollection)
Agora temos vários blocos de código, todos eles relativos a efeitos, e estão agrupados por ordem de tempo, ou seja, por ordem que serão exibidos no ecrã: EFEITO DE ENTRADA-SÍLABAS ESTÁTICAS-EFEITO DAS SÍLABAS-EFEITO DE SAÍDA. Cada bloco possui uma linha que corresponde ao efeito, outra ao tempo de entrada, outra ao tempo de saída e outra sobre o nível da camada. Este último é importante quando queremos sobrepor um efeito sobre outro, visto que é para isso que serve as camadas, o maior número, sobrepõe-se às outras.
Basta ler o código seguinte que está comentado, para entenderem o que cada linha realmente representa:
--#EFEITO DE ENTRADAE para terminar, falta só o registo das macros:
l = table.copy(line) --Copia as linhas para se usar
l.text = "{"..alpha('ff')..an(5)..move(x+20,y-20,x,y)..bord(0)..fr(-45)..color(1,'ffffff')..t(fr(0)..color(1,line.styleref.color2)..bord(2)..alpha(00)).."}"..sil() --Efeitos (Onde poderás adicionar os teus efeitos de entrada)
l.start_time = line.start_time-500 --Tempo de Entrada do Efeito (-500 = entrará 0.5 segundos antes do seu tempo.
l.end_time = line.start_time --Tempo de Saída do Efeito
l.layer=0 --Número da Camada... Ou seja, em que nível ficará o Karaoke (Por detrás ou à frente de outros efeitos)
subs.append(l) --Adiciona a linha que foi copiada e modificada à legenda
Código: Selecionar todosGerar urls premium
aegisub.register_macro(script_name, "Aula Básica de LUA! D:", fx_leinad)
aegisub.register_filter(script_name, "Aula Básica de LUA! D:", 2000, fx_leinad)

Como Fazer Karaoke em LUA - Parte 3
Nesta parte as coisas começarão a ser mais "pesadas". Quem cursa informática ou esteja à vontade com linguagens de programação, não terá dificuldade alguma. E quando digo "pesada", é porque teremos de aprender diversas funções e nomes de variáveis que servem para se fazer os efeitos. Começarei por detalhar a linguagem Lua e só depois irei focar nas coisas fundamentais do Aegisub.
Linguagem LUA
Símbolos: São muito frequentes e é natural que temos de os conhecer para sabermos realizar operações matemáticas.
== igual a
~= não é igual a (diferente a)
< menor que
> maior que
<= menor ou igual que
>= maior ou igual que
+ somar
- subtrair
* multiplicar
/ dividir
^ potência
Função: As funções são criadas para nos poupar trabalho. E claro são necessárias se não queremos repetir sempre o mesmo código, então se houvesse um erro, teria de se corrigir em todas as repetições de código, e desta forma só se corrige a função.
Exemplo:
function Soma(a, b) -- Criação da função Somar, que recebe 2 valores: a e bModo de Uso:
somar = a+b -- Criação de uma variável que ficará com o valor da soma de a + b
return somar -- Retorno da variável somar, que será o resultado a imprimir
end -- Fim da função
Soma(5, 10)(Ao escreverem Soma(5,10) o resultado que irá advir daí é 15. Portanto o >> é apenas para entenderem que se executassem essa função, seria imprimido o valor a frente de >>)
>>15
if – else – not – elseif: A condição if verifica se algo é verdadeiro ou falso. O if apenas nos devolve um valor True (verdadeiro) e um valor False (falso) que podemos definir se usarmos o else.
Exemplo 1:
var = rand(5, 10) -- Criação de uma variável com números aleatórios entre 5 e 10Como não definimos um FALSE, o valor de var se não for igual a 10, continuará a ser o que lhe calhou aleatoriamente.
if var == 10 then -- SE a variável VAR for IGUAL a 10 ENTÃO
val = 20 -- a variável VAL ficará com o valor 20 (valor True)
end -- Fim do if
Exemplo: Se fosse 5, continuaria a ser 5, mas se fosse 10, seria alterado para 20, porque foi isso que definimos no valor TRUE.
Exemplo 2:
var = rand(5, 10) -- Criação de uma variável com números aleatórios entre 5 e 10Aqui já definimos um FALSE, portanto... todo o número diferente de 10, será automaticamente alterado para 30, que foi o valor que definimos.
if var == 10 then -- SE a variável VAR for IGUAL a 10 ENTÃO
val = 20 -- a variável VAL ficará com o valor 20 (valor True)
else -- SENÃO
val = 30 -- a variável ficará com o valor 30 (valor False)
end -- Fim do if
Podemos também usar if nas funções e executar um not, onde aplicaremos se não existir um valor declarado na função. Pode ser muito útil, como podemos ter de considerar o seu uso.
Exemplo 3:
function Soma(a, b) –- Criação da função Somar, que recebe 2 valores: a e bModo de Uso:
if not b then –- SE NÃO existir valor em b ENTÃO
somar = a+a –-Criação de uma variável que ficará com o valor da soma de a + a
else –- SENÃO (SE existir valor em b)
somar = a+b –- Criação de uma variável que ficará com o valor da soma de a + b
end –- Fim do if
return somar –- Retorno da variável somar, que será o resultado a imprimir
end –- Fim da função
Soma(5, 10)
>>15
Soma(3)
>>6
Por último, temos um elseif que dá-nos a possibilidade de criar outra opção "True/False".
Exemplo 4:
function Soma(a, b, c) –- Criação da função Somar, que recebe 3 valores: a, b e cModo de Uso:
if not b and c then –- SE NÃO existir valor em b e c ENTÃO
somar = a+a –- Criação de uma variável que ficará com o valor da soma de a + a
elseif not c then –- SENÃO SE NÃO existir valor em c ENTÃO
somar = a+b –- Criação de uma variável que ficará com o valor da soma de a + b
else –- SENÃO (SE existir valor em a, b e c)
somar = a+b+c –- Criação de uma variável que ficará com o valor da soma de a + b + c
end –- Fim do if
return somar –- Retorno da variável somar, que será o resultado a imprimir
end –- Fim da função
Soma(5, 10, 3)
>>18
Soma(3)
>>6
Soma(2, 8)
>>10
for – while: Estes dois são estruturas de repetição, quero dizer com isso que podemos repetir X quantidade de vezes o código nele contido. O for é o mais usado para se fazer efeitos, visto que é mais rápido e simples.
Exemplo 1:
for j = 1, 5 do –- Criação de um for com variável j, que é a que controla a repetição. Neste caso irá repetir-se 5 vezes.Resultado:
var = 5+j –- Criação de uma variável var com valor 5 + o valor actual de j que irá aumentar a cada ciclo.
end –- Fim do Ciclo
>>6Como j se repete 5 vezes (de 1 a 5), a cada ciclo que ele faz vai somando a var o valor de j que está sempre a ser incrementado pelo próprio ciclo:
>>7
>>8
>>9
>>10
5+1=6, 5+2=7, 5+3=8, 5+4=9, 5+5=10. O valor a vermelho é o valor de j, que vai de 1 a 5.
O while é bem mais distinto, visto que temos de criar antes uma variável de incrementação que tem de ser menor que a quantidade a se repetir.
Exemplo 2:
ini = 0 -- Criação da variável de incremento, deverá ser (sempre) 0Resultado:
while ini < 5 do -- Criação do ciclo while com a instrução que verifica se a variável ini é menor que 5, e se isso se verificar então executa o código da função
var = 5+ini -- Criação de uma variável var com valor igual a 5 + valor do incremento ini
ini = ini+1 -- Ao contrário do ciclo for, o incremento tem de ser feito por nós, e faremos um que incremente de 1 em 1 (0+1=1, 1+1=2, 2+1=3, 3+1=4, 4+1=5)
end -- Fim do ciclo
>>6
>>7
>>8
>>9
>>10
local – do – then – end – and – or: Quando usámos local, o que estamos a dizer é que iremos executar apenas de maneira local e não global. Normalmente as variáveis declaradas como local podem apenas ser usadas dentro das funções onde foram declaradas, e fora dessa função essa variável nem sequer é reconhecida, só se fosse global. O do é usado para iniciar um ciclo e o then para iniciar o if ou o elseif. O end é usado para dar um fim a alguma função ou ciclo ou condição. E por fim o and e o or são usados para dar mais alternativas nas condições if.
Exemplo:
local valor = 10 -- Variável local
if valor <= 10 and valor >=5 then -- Se VALOR for menor ou igual a 10 E maior ou igual a 5 ENTÃO
…
end
valor = 10 -- Variável global porque não se colocou local
if valor == 10 or valor == 5 then -- Se VALOR for igual a 10 OU igual a 5 ENTÃO
…
end
Biblioteca math: Esta biblioteca que vem incluída na linguagem Lua, serve para fazermos cálculos matemáticos, daí o math x'D. Existem várias funções math, mas apenas irei falar de alguma delas, as mais usadas para os efeitos de karaoke. A primeira será math.random, que nos dá um número aleatório de acordo com os limites estabelecidos. O primeiro valor tem de ser menor que o segundo e pode ser um valor negativo. Este math fazendo uso da leinadcollection passa a ser rque é uma função que faz uso delaso dela.
Exemplo 1:
var1 = math.random(16, 33)Possível Resultado:
var2 = math.random(-10, 0)
var3 = rand(-5, 11)
>>21
>>-2
>>9
Agora falarei de math.ceil e math.floor, que nos serão úteis quando formos trabalhar com números reais. O math.ceil obtém o maior inteiro, enquanto que com o math.floor se obtém o menor inteiro.
Exemplo 2:
var1 = math.ceil(0.94)Resultado:
var2 = math.floor(0.94)
>>1
>>0
Sobre o math.cos e math.sin, que serve para obtermos o coseno e o seno de algum ângulo.
Exemplo 3:
var1 = math.cos(360)Resultado:
var2 = math.sin(360)
>>-0.28369109148653
>>0.95891572341431
Arrays: Os arrays são uma espécie de armazém onde podemos guardar informação, tanto letras, como números, inclusive variáveis como outros arrays. Eles são muito úteis já que ao guardarmos informação podemos utilizá-la quando quisermos e de uma forma simples.
Exemplo 1:
array1 = {'00ff00', 'ffffff', '0000ce'} -- Um array com coresModo de Uso:
array2 = {'Olá', 'adeus'} -- Um array com palavras
array3 = {c1 = 'ec12ff', t1 = 'teste'} -- Um array com variáveis
array4 = {c2 = {'bc45ef'}, t2={'teste'}} -- Um array com outros 2 arrays dentro
array1[1]Como podem ver no modo de uso array1[1] o valor que está entre [] é a posição do valor nesse array. É como se fosse uma caixa e na caixa número 1 do array1 temos o valor "00ff00".
>>00ff00
array2[2]
>>adeus
array3.c1
>>ec12ff
array4.t2[1]
>>teste
Outra coisa interessante nos arrays é que podemos usá-lo juntamente com funções math, como math.random ou rand() e obter resultados aleatórios, o que o torna muito útil se o array for de cores ou números.
Exemplo 2:
array5 = {'00ff00', 'ffffff', '0000ce'} -- Um array com coresModo de Uso:
Array6 = {20, 30, 40} -- Um array com números
array5[math.random(1,3)] -- Colocando um limite entre 1 até ao número máximo de cores presentes no array, neste caso são 3.
>>ffffff
array6[rand(1, 3)] -- Idêntico ao caso de acima, apenas estamos a fazer uso de rand() da leinadcollection.
>>20
E com isto dou por terminado esta parte do tutorial que visava ensinar um pouco de programação, para se sentirem mais à vontade quando forem escrever funções para criar karaokes.