Funções tradicionais
o uso de funções no Construct 3 desempenham um papel crucial na simplificação e otimização do código de um jogo. Elas são ferramentas poderosas que ajudam a organizar eventos e ações de forma eficiente.
A funções dão a liberdade para adicionar parâmetros, que seriam basicamente variáveis internas da função, funciona quase da mesma forma que uma variável local, a diferença é que na hora de chamar a função com parâmetros, a janela permite adicionar os valores que serão manipulados dentro da função.
Acima temos um exemplo de uma função com parâmetros.
Acima temos uma aba que aparece sempre que chamar uma função que tenha parâmetros.
Nesse tutorial não irei ensinar a como usar funções tradicionais, o foco será em como chamar funções mapeadas com parâmetros sem código JSON, explicando em detalhes sobre 'parâmetro de encaminhamento' e 'ID de posicionamento'.
Funções mapeadas
Existe também as funções mapeadas, que seriam basicamente funções que podem ser acionadas utilizando uma string(sequência de caracteres, como letras, números e símbolos, que são usados para representar texto).
Usar funções mapeadas no Construct 3 oferece diversos benefícios e um lado positivo notável é a redução da necessidade de utilizar muitos "if" e "else". Aqui estão alguns dos benefícios e vantagens desse enfoque:
- Organização do Código: Com funções mapeadas, você pode agrupar ações relacionadas em blocos de código separados, tornando seu projeto mais organizado e mais fácil de entender. Isso é particularmente útil em projetos complexos, nos quais diversas ações precisam ser executadas de acordo com diferentes situações.
- Reutilização de Código: Uma vez que você definiu uma função mapeada, pode usá-la em diversos eventos e situações sem a necessidade de duplicar o código. Isso economiza tempo e evita erros, já que você só precisa fazer alterações em um único lugar para afetar todas as instâncias da função.
- Legibilidade Aprimorada: Evitar a necessidade de muitas declarações "if" e "else" pode tornar seu código mais limpo e fácil de ler. Em vez de ter uma longa cadeia de condicionais, você pode simplesmente chamar a função apropriada quando necessário.
- Manutenção Simplificada: Quando é necessário fazer alterações em um comportamento específico, basta editar a função mapeada, em vez de vasculhar todo o código em busca de todas as ocorrências de "if" e "else" relacionadas. Isso reduz o risco de erros introduzidos durante a manutenção.
- Desempenho Melhorado: Em alguns casos, funções mapeadas podem melhorar o desempenho, já que o Construct 3 pode otimizá-las internamente de maneira mais eficiente do que uma série de condicionais.
Em resumo, usar funções mapeadas no Construct 3 oferece uma abordagem mais eficiente, organizada e sustentável para o desenvolvimento de um jogo, que ajuda a evitar a complexidade excessiva do código baseada em "if" e "else" e a simplificar o processo de criação e manutenção de jogos.
Tipos de funções mapeadas
Durante minha busca por maneiras eficazes de otimizar os eventos do meu jogo, me deparei com as funções mapeadas. Elas podem ser divididas em dois tipos:
Funções Mapeadas Simples:
Funcionam de maneira semelhante às funções tradicionais, sem o uso de parâmetros, podendo ser chamadas diretamente.
Funções Mapeadas com Parâmetros:
São semelhantes às funções tradicionais com parâmetros, mas há um desafio na forma de acioná-las.
O problema na hora de acionar função mapeada com parâmetro
O problema em questão reside na escassez de informações disponíveis sobre como adicionar valores aos parâmetros de funções mapeadas.
Ao realizar uma pesquisa sobre o assunto, é evidente que há uma carência significativa de recursos detalhados na internet que abordem esse tema. Muitos usuários no fórun da Scirra já postaram perguntas sobre como inserir valores nos parâmetros dessas funções, mas, em grande parte, as respostas recomendavam o uso de código JSON diretamente no evento para invocar a função mapeada com os parâmetros.
Isso ocorria porque muitos encontravam dificuldades em entender como chamar a função mapeada e adicionar os parâmetros simultaneamente. Como resultado, tem havido várias reclamações sobre a complexidade dessa tarefa.
É mais simples do que parece
Primeiro precisamos entender o porque dessa dificuldade em criar esse tipo específico de função.
quando adicionamos a ação "chamar função mapeada", abre uma janela igual a da imagem acima.
temos três opções que devem ser preenchidas para que o evento funcione corretamente, elas são:
- Nome do mapa
- String
- Parâmetro de encaminhamento
Nome do mapa seria o nome da biblioteca que tem incluso a string de acesso a função que vc mapeou
String seria basicamente a chave de acesso a função que está dentro da biblioteca escolhida.
Agora vem o problema que está justamente no Parâmetro de encaminhamento
Se você clicar na área de preenchimento do Parâmetro de encaminhamento, pode observar que irá aparecer uma descrição sobre essa opção.
A descrição de parâmetro de encaminhamento diz:
"Índice do parâmetro da chamada de função atual para encaminhar a esta chamada de função. Note que todos os parâmetros sempre são encaminhados se o padrão for chamado."
Se você não entendeu, não se sinta mal, de fato, a informação fornecida é bastante confusa e parece não fazer sentido. A maneira como a frase está estruturada torna difícil compreender seu significado.
Além disso, a frase parece contraditória, pois afirma que "todos os parâmetros são sempre encaminhados se o padrão for chamado", o que não é claro e pode levar a interpretações erradas.
Como chamar função mapeada com parâmetros
Além desse problema de entender o que seria o "parâmetro de encaminhamento", existe também o problema de não existir nada na internet que explique profundamente como ele realmente funciona.
O que você precisa entender é que o "parâmetro de encaminhamento" é quem irá encaminhar os valores para os parâmetros da função mapeada que você está chamando.
Note que se vc adicionar novos parâmetros em uma função tradicional e for chama-la diretamente, irá aparecer as áreas para vc adicionar os valores nos parâmetros daquela função.
O mesmo não acontece quando você for chamar uma função mapeada devido a ação "chamar função mapeada" não estar ligada diretamente a uma função, dessa forma só temos aquelas três opções para prencher e nenhuma area para adicionar os valores nos parâmetros daquela função.
Para chamar funções mapeadas e colocar os valores desejados nos parâmetros, será necessário uma função intermediaria que irá coletar os valores para serem enviadas para função mapeada escolhida.
No exemplo acima tenho duas funções, sendo elas:
Intermediary- será a função intermediária que irá coletar os dados e usa a ação "chamar função mapeada".
Function- função mapeada com parâmetros que serão preenchidos durante a chamada feita pela função Intermediary
Agora vem a parte interessante, você deve estar se perguntando como que é feito essa transferência e o que a opção "parâmetro de encaminhamento" influencia, e até mesmo o porque de ter o número 0 nela.
Preste bem atenção agora, você precisa saber que a posição dos parâmetros dentro de uma função importam e possuem o que eu chamo de "ID de posicionamento".
No exemplo acima eu coloquei números em azul em cada parâmetro, a numeração vai de cima para baixo, ou seja, Parameter0 é id:0, Parameter1 é id:1, Parameter2 é id:2
Lembra que eu disse que a posição dos parâmetros dentro da função importa?
Se eu mudar a posição acontece o seguinte:
Os "ids de posicionamento" mantém a mesma posição pois eles nunca alteram, a única coisa que muda são as posições dos parâmetros, e devido a essa mudança, na função Intermediary o Parameter2 passa a ter id:0, o Parameter0 passa a ter id:1 e o Parameter1 agora terá id:2.
Agora vem a explicação de como o "parâmetro de encaminhamento" funciona na hora de chamar uma função mapeada com parâmetros
Agora usando o exemplo anterior(imagem acima), se o "parâmetro de encaminhamento" for 0, significa que ele vai encaminhar todos os valores de parâmetros que tenham id de posicionamento igual a 0 ou maior, ou seja, vai basicamente encaminhar todos os valores e preencher na função mapeada na mesma ordem.
o resultado no exemplo acima seria um texto mostrando os valores 30 10 e 5
Agora e se o "parâmetro de encaminhamento" for 1?
O que vai acontecer é que o sistema vai encaminhar apenas os parâmetros que tiverem "id de posicionamento" igual ou maior do que 1
o resultado seria um texto mostrando os valores 10 5 0
Você deve estar se perguntando por que há um zero no final deste texto. A explicação é a seguinte: sempre que os valores são encaminhados, eles são alocados de cima para baixo, independentemente da posição do 'ID de posicionamento'. O 'ID de posicionamento' serve apenas para que o parâmetro de encaminhamento identifique quais valores serão transferidos. Após a transferência, o sistema aloca os valores na ordem de cima para baixo.
Portanto, é fundamental observar a ordem dos parâmetros ao efetuar transferências, uma vez que os nomes não têm impacto, mas a posição é crucial.
Conclusão
Usar funções mapeadas com parâmetros na realidade não é difícil, o grande problema era falta de informação, o que levou muitos desenvolvedores a optar por usar JSON em seus eventos, mas espero que as informações compartilhadas neste artigo possa fornecer uma compreensão mais clara e consiga ajudar os desenvolvedores a usar funções mapeadas com parâmetros de forma simples e sem a necessidade de uso de JSON.