Primitivos e Lógica

Este artigo apresenta principalmente conceitos relacionados ao editor primitivo e aos primitivos no CraftLand.

Visão geral dos Metablocks

Ao editar gráficos, precisamos observar o formato de cada bloco gráfico. O que precisamos fazer é juntá-los de acordo com regras fixas.

Operações básicas

Antes de entrarmos no editor primitivo, precisamos abrir um script. Abra o CraftLand, clique em [Mais] no canto superior esquerdo e, em seguida, clique em [Script de Bloco]. Ao entrarmos no editor primitivo, abriremos o “script global” por padrão.
image-20241031110011453

Introdução à interface

Após entrar no editor de elementos, há 4 áreas na interface do editor que merecem nossa atenção, conforme mostrado na figura abaixo. SeaTalk_IMG_20241031_113903

Número de série Imagem Descrição
1 image-20241031114641450 No canto superior esquerdo da interface, há uma caixa de pesquisa. Como há um grande número de blocos primitivos, podemos recuperá-los inserindo palavras-chave na caixa de pesquisa.
2 image-20241031114811375 No canto superior direito da interface, você encontrará a lista de seleção de scripts. Clique no ícone à direita para exibir uma opção suspensa, mostrando os scripts disponíveis no momento. Scripts globais são criados por padrão.
3 image-20241031173408111 Dividimos os primitivos em 6 categorias. Podemos clicar no ícone da categoria para expandir a lista de blocos de primitivos.
4 image-20241031114830172 O ícone à esquerda é o botão de desfazer, que pode desfazer a última operação. O ícone à direita é o botão de refazer, que pode refazer a última operação desfeita.

Colocar primitivos

1. Arraste o bloco: Depois de entender a interface, primeiro abrimos a primeira categoria no canto inferior esquerdo, selecionamos um bloco primitivo e o arrastamos para o espaço em branco como ponto de partida da nossa lógicaimagem-20241031171419878

2. Conectando blocos: Selecionamos um bloco com uma depressão na parte superior da lista de blocos. Ao arrastar o bloco para a parte inferior do bloco inicial, veremos que um prompt amarelo da interface do usuário aparecerá na parte elevada abaixo do bloco inicial. Ao soltarmos os dedos, veremos que os dois blocos serão automaticamente adsorvidos. Assim, concluímos uma lógica simples. image-20241031171627914

3. Preencha os dados: Primeiro, arrastamos os dados no bloco primitivo ou arrastamos o tipo de dado apropriado na lista primitiva.

image-20241031174335831

Em seguida, arraste o bloco de dados para o espaço de dados correspondente. Uma caixa de diálogo amarela da interface do usuário aparecerá no espaço de dados, indicando que o tipo de bloco atual pode ser inserido. Ao soltar o dedo, o bloco de dados será automaticamente absorvido pelo espaço. image-20241031175503431

Nota: Quando o tipo de dado preenchido for inconsistente com o tipo de dado no espaço, o editor terá um prompt óbvio e exibirá automaticamente o bloco de dados que não corresponde ao tipo.

imagem-20241031183111256

4. Desmontando blocos Quando movemos um dos vários blocos gráficos que estão conectados, todos os blocos conectados abaixo dele serão removidos juntos.

image-20241031182555866

5. Excluir blocos: Ao pressionar e segurar qualquer bloco gráfico, uma “lixeira” aparecerá no lado direito da interface. Podemos excluir o bloco gráfico movendo-o para a lixeira.

image-20241031182311721

Claro, também podemos arrastar vários blocos para a “lixeira” para excluir vários blocos ao mesmo tempo.

image-20241031183322347

Forma

Descrição do bloco Ícone
Somente o bloco elevado abaixo é o ponto de partida de uma lógica. image-20241030185836296
O bloco com apenas o topo afundado geralmente é o ponto final de uma lógica. image-20241030185844004
Se não houver depressão na parte superior e nenhuma saliência na parte inferior, significa que este bloco é um pedaço de dados, que pode ser aplicado a outros blocos como um parâmetro em algumas operações lógicas. image-20241030185856813
Se um bloco tiver um topo elevado e um fundo rebaixado, significa que o bloco pode ser vinculado a outros blocos com fundo elevado e também a mais blocos abaixo dele. Pode ser um nó de uma lógica. image-20241031101239718
Na classificação de blocos, encontraremos um bloco com um formato especial. Este bloco especial é uma expressão condicional, que é dividida em convexidades externas e áreas côncavas e convexidades internas e áreas côncavas. Podemos conectar outros blocos normalmente nas convexidades externas e áreas côncavas do bloco de expressão condicional, como se estivéssemos conectando outros blocos, ou podemos vincular blocos dentro da expressão condicional, e a lógica escrita dentro dela precisa atender a uma lógica condicional específica antes de poder ser calculada. image-20241031101800841

Classificação

Para encontrar os blocos necessários de forma mais eficiente no editor primitivo, dividimos os blocos em 7 tipos.

Conforme mostrado na figura a seguir:

Tipo Diagrama Visão geral
Incidente SeaTalk_IMG_20241030_143100 Tipo de evento: Geralmente, como o ponto de tempo em que uma lógica começa, quando escrevemos a lógica primitiva, primeiro precisamos esclarecer em qual ponto de tempo queremos que essa lógica seja acionada. Por exemplo, quando o jogador é ressuscitado, queremos dar a ele uma arma ou quando a rodada começa, queremos colocar uma caixa de suprimentos de lançamento aéreo no centro do mapa, então ‘Quando o jogador é ressuscitado’ e ‘Quando a rodada começa’ são os nós de tempo necessários para essa lógica.
Entidade SeaTalk_IMG_20241030_143101 Tipo de entidade: é um conceito importante no CraftLand (consulte ‘Conceitos importantes’ para obter detalhes). No processo de edição de primitivas, frequentemente chamamos ou alteramos as propriedades de uma entidade.
Jogo SeaTalk_IMG_20241030_143105 Tipo de Jogo: No tipo de Jogo, fornecemos muitas funções comumente usadas por criadores de CL. Essas funções geralmente são configurações que precisam ser ajustadas com frequência em alguns jogos. Essas funções também estão muito relacionadas à jogabilidade, como criar um monstro, alterar o skybox ou entrar em um canal de voz.
Dados SeaTalk_IMG_20241030_143106 Tipo de dados: Blocos de dados podem ser parâmetros necessários para a maioria das operações lógicas. Podem ser um dado usado em outros blocos ou uma operação para calcular um valor.
Lógica SeaTalk_IMG_20241030_143109 Tipo de lógica: No tipo de lógica, fornecemos múltiplas operações lógicas complexas. Este tipo de operação lógica é frequentemente usado no processamento de dados. Ela pode filtrar, julgar ou tomar decisões com base em condições específicas. Por exemplo, determinar se um número é maior que outro e, então, decidir realizar ações diferentes.
Variável SeaTalk_IMG_20241030_143111 Tipo de variável: No tipo de variável, podemos criar variáveis por nós mesmos. As variáveis criadas dessa forma são variáveis de script, que são usadas para o processamento de dados do script atual. Em outros scripts, as variáveis podem ser obtidas e definidas por referência externa.
Função SeaTalk_IMG_20241030_143113 Tipo de função: No tipo de função, você pode criar eventos personalizados. Os eventos personalizados que criamos podem encapsular parte da lógica, tornando-a mais clara, fácil de entender e manter.

Descrição do bloco de elementos lógicos

Substantivo do bloco Diagrama Descrição
Instruções condicionais (instrução if) image-20241104111959461 Se a condição for atendida, o nó sob IF será executado.
Instruções condicionais…else(if…else statement) image-20241104112010284 Se a condição for atendida, o nó sob IF será executado. Se a condição não for atendida, o nó sob ELSE será executado.
Laço condicional (instrução while) image-20241104112023063 Enquanto a condição for atendida, os nós abaixo serão executados em um loop.
Loop de rage inteiro (para declaração de índice) image-20241104112033968 O parâmetro i começa no valor mínimo e, cada vez que o nó inferior é executado, i aumenta o valor do passo até que i seja maior ou igual ao valor máximo.
Faça um loop em cada elemento (para cada instrução) image-20241104112043683 Para cada KEY na lista de parâmetros/dicionário, execute o nó abaixo uma vez.
Verifique se é um valor nulo image-20241104112050652 Verifique se é um valor nulo e trate o valor nulo adequadamente para evitar erros.
Continuar para o próximo image-20241104112056253 Ignorar este loop e entrar no próximo loop do corpo do loop.
Interromper loop image-20241104112103316 Interromper o loop e continuar executando o nó após o corpo do loop.

O que é ECA?

No contexto de código, ECA (Evento-Condição-Ação) geralmente se refere a um método de representação de regras.

I. Componentes

  1. Event
  • Uma situação ou ocorrência específica que desencadeia a execução de uma regra. Por exemplo, um jogador entra no jogo, causa uma morte ou sai do jogo.

Exemplo: O jogador causou uma morte e, após acionar este evento, o jogador recebeu 100 moedas de ouro

SeaTalk_IMG_20241101_114133

  1. Condição
  • Uma expressão lógica que determina se ações subsequentes devem ser executadas após a ocorrência de um evento. A ação correspondente só será executada se a condição for verdadeira. Por exemplo, se o número de zumbis for menor que 10, crie um zumbi; se o número de jogadores for igual a 1, obtenha uma metralhadora Gatling; ou se as coordenadas do jogador forem iguais a um determinado valor, teletransporte o jogador para outra coordenada.

Exemplo: Quando um jogador entra no jogo e tem um microfone ligado, seu nome se tornará 'Eu tenho um microfone’SeaTalk_IMG_20241101_143623

  1. Ação
  • Se o evento ocorrer e as condições forem atendidas, a ação específica será executada. Isso pode incluir modificar dados, chamar uma função, enviar uma mensagem, acionar outro evento, etc.

Exemplo: Dê ao jogador um AK47 no início da rodada e defina a saúde do jogador para 500

SeaTalk_IMG_20241101_145943

Conceitos importantes em ECA

Nome do conceito Descrição
Função Uma função (frequentemente chamada de método) é um bloco de código reutilizável que executa uma tarefa específica. Uma função encapsula uma operação ou tarefa específica em um bloco de método independente, tornando as operações e a lógica mais modulares e fáceis de manter. Código externo pode executar tarefas específicas chamando uma função sem precisar entender os detalhes de implementação da função.
Parâmetros Parâmetros são valores passados para funções ou métodos quando são chamados. Eles incluem parâmetros formais e parâmetros reais, que podem ser divididos em tipos de parâmetros para fornecer flexibilidade e transferência de dados, etc.
Enumeração Enumeração é um conceito de coleta constante de dados, como uma enumeração de método de ataque, que pode conter opções como corpo a corpo, tiro, explosão, etc. Diferentes tipos de enumeração não podem ser atribuídos uns aos outros, mesmo que seus valores sejam os mesmos, eles não podem ser atribuídos devido à semântica diferente.

Eventos personalizados e variáveis personalizadas

Eventos personalizados

No canto inferior esquerdo do editor de elementos, encontramos um total de sete tipos de listas de elementos. No tipo de função, podemos clicar em [CRIAR FUNÇÃO] para criar um evento personalizadoSeaTalk_IMG_20241101_150402

SeaTalk_IMG_20241101_150359

Visão geral da interface de evento personalizada

Número de série Imagem Descrição
1 image-20241101151951739 Aqui podemos preencher o nome do evento personalizado
2 image-20241101151917848 Clique no sinal de mais para adicionar um parâmetro interno ao evento personalizado. Este parâmetro só pode ser usado no evento personalizado ao qual pertence.
3 image-20241101151927435 Clique no sinal de mais no canto inferior direito para adicionar um valor de retorno ao nosso evento personalizado. Quando chamamos esse evento em outra lógica de algoritmo, podemos obter os dados desejados.

Descrição do evento personalizada

Ao editar primitivas, integraremos vários blocos primitivos em um evento personalizado. Também podemos dizer que encapsulamos várias lógicas de cálculo em um único método. Há várias vantagens em fazer isso:

1. Nomenclatura clara: Usando eventos encapsulados, não precisamos ler lógica de bloco primitiva complexa, podemos entender toda a intenção da lógica do evento apenas nomeando

2. Simplifique a estrutura primitiva: Encapsular cálculos complexos em eventos personalizados pode tornar a lógica da estrutura principal mais concisa e clara, reduzir a complexidade da estrutura primitiva e melhorar a legibilidade.

2. Reutilização: Quando vários blocos lógicos gráficos exigem a mesma operação, você pode reutilizar o evento personalizado encapsulado para evitar a gravação repetida da mesma lógica gráfica. Além disso, quando modificamos e mantemos esse evento personalizado, também podemos modificar vários blocos lógicos gráficos que reutilizam o evento personalizado ao mesmo tempo, evitando a modificação repetida do mesmo código em vários locais.

Variáveis personalizadas

Visão geral da interface de variáveis personalizadas

Na lista de tipos de elementos, selecione o tipo [VARIÁVEL] e clique em [CRIAR VARIÁVEL] para criar uma variável personalizadaimagem-20241101162644288

Ao criar uma variável personalizada, podemos definir o nome da variável e o tipo de dados da variável

image-20241101162620704

Descrição da variável personalizada

Ao escrever lógica gráfica, às vezes precisamos definir variáveis de parâmetros de tipos de dados de acordo com necessidades específicas. A função de variável personalizada resolve essa necessidade.

As variáveis que você cria também podem ser usadas para passar dados entre diferentes métodos. Ao armazenar dados em uma variável, você pode passá-los como parâmetro para outro método ou retorná-los de um método para quem os chamou.

Exemplo de evento/variável personalizado

Criaremos uma lógica para demonstrar como usar eventos personalizados e variáveis personalizadas no editor primitivo

Exemplo de lógica: quando um jogador mata alguém, o limite de saúde do jogador será reduzido em 10 pontos, e o mínimo será reduzido para 20.

  1. Primeiro, criamos uma variável personalizada chamada “CurrentMaxHp” e definimos o tipo de dado como “int”. Ao mesmo tempo, criamos um evento personalizado chamado “DecreaseMaxHp” como preparação preliminarSeaTalk_IMG_20241101_175037

SeaTalk_IMG_20241101_175059

  1. Localize e arraste o evento “Quando um jogador causa uma morte” e conecte-o ao evento personalizado “DecreaseMaxHp” que acabamos de criar. Após a conexão, concluímos a base lógica para reduzir o limite de vida do jogador quando ele mataSeaTalk_IMG_20241101_183151

  2. Após concluir a lógica básica, podemos começar a escrever a estrutura primitiva do evento personalizado. Primeiro, atribuímos o valor da variável que acabamos de criarSeaTalk_IMG_20241101_183704

  3. Em seguida, conecte um algoritmo para definir a variável como -10 sempre que um evento for acionadoSeaTalk_IMG_20241101_183713

  4. Adicionado o limite mínimo de saúde, adicionada uma verificação: se o limite de saúde atual for menor ou igual a 20, o limite de saúde atual será igual a 20SeaTalk_IMG_20241101_183808

  5. Reatribua a variável calculada ao atributo de limite de vida do jogador. Até agora, concluímos toda a lógica necessária. SeaTalk_IMG_20241101_183902

  6. VerifiqueSeaTalk_IMG_20241101_184513

O limite de saúde foi reduzido corretamente e verificado corretamente. image-20241101184737595