Documentação do Godot Engine 4.0 - Tutorial passo a passo - Criando seu primeiro script

Este artigo é o resultado da tradução em inglês do Google Tradutor, e o DrGraph adicionou algumas correções com base nisso. Página original em inglês:

Criando seu primeiro script — Documentação Godot Engine (estável) em inglês

Crie seu primeiro script¶

Nesta lição, você escreverá seu primeiro script para girar o ícone Godot usando GDScript. Como mencionamos na introdução , assumimos que você tem experiência em programação. Por conveniência, o código C# equivalente foi incluído em outra guia.

Referência: Para saber mais sobre o GDScript, suas palavras-chave e sintaxe, acesse Referência do GDScript .

Referência: Para saber mais sobre C#, visite a página C# Fundamentals .

Configurações do Projeto¶

Crie um novo projeto para começar do zero. Seu projeto deve incluir uma imagem: o ícone Godot, que usamos muito na comunidade para prototipagem.

Precisamos criar um nó Sprite2D para exibi-lo no jogo. No encaixe da cena, clique no botão Outros nós.

Digite "Sprite2D" na barra de pesquisa para filtrar os nós e clique duas vezes no Sprite2D para criar o nó.

Sua guia de cena agora deve ter apenas um único nó Sprite2D.

O nó Sprite2D precisa de uma textura [Texture] para exibir. No Inspetor à direita, você pode ver que a propriedade Texture indica "[empty]". Para exibir o ícone Godot, clique e arraste o arquivo icon.svgdo dock do sistema de arquivos para o slot de textura.

Nota: Você pode criar nós Sprite2D automaticamente arrastando e soltando imagens na viewport.

Em seguida, clique e arraste o ícone na janela de visualização para centralizá-lo na visualização do jogo.

Crie um novo script¶

Para criar um novo script e anexá-lo ao nosso nó, clique com o botão direito do mouse no Sprite2D no encaixe da cena e selecione Attach Script.

A janela Anexar Script de Nó é exibida. Permite escolher o idioma do script e o caminho do arquivo, entre outras opções.

Altere o campo de modelo de "nó: padrão" para "objeto: vazio" para começar com um arquivo limpo. Deixe as outras opções como padrão e clique no botão Criar para criar o script.

O espaço de trabalho do script deve aparecer com sprite_2d.gdo novo arquivo que você abriu e a seguinte linha de código:

roteiro gd
estende Sprite2D
C #

usando Godot;

classe parcial pública MySprite2D : Sprite2D
{ }

Todo arquivo GDScript é implicitamente uma classe. A palavra-chave extendsdefine as classes das quais este script herda ou estende. Nesse caso, é Sprite2D, o que significa que nosso script terá acesso a todas as propriedades e funções do nó Sprite2D, incluindo as classes que ele estende, como Node2D, CanvasItemNode.

Nota: No GDScript, se você omitir a linha com a palavra-chave extends, sua classe estenderá implicitamente RefCounted , que Godot usa para gerenciar a memória do aplicativo.

As propriedades herdadas incluem aquelas que você pode ver no encaixe do Inspetor, como o arquivo texture.

Nota: Por padrão, o Inspetor exibe as propriedades de um nó no "Title Case", com palavras em maiúsculas separadas por espaços. No código GDScript, essas propriedades estão em "snake_case", que são letras minúsculas com sublinhados separando as palavras.

Você pode passar o mouse sobre qualquer nome de propriedade no inspetor para ver uma descrição e seu identificador no código.

Olá mundo!

Nosso script atualmente não está fazendo nada. Vamos imprimir o texto "Hello, world!" no painel inferior da saída para começar.

Adicione o seguinte código ao seu script:

roteiro gd

func _init():
    print("Olá, mundo!")

C#
public MySprite2D() 
{ 
    GD.Print("Olá, mundo!"); 
}

Vamos decompô-lo. A palavra-chave funcdefine uma nova função chamada  _init. Este é um nome especial para o construtor da nossa classe. Se você definir esta função, o mecanismo  _init()a chamará quando cada objeto ou nó for criado na memória.

Nota: GDScript é uma linguagem baseada em indentação. Uma tabulação no início da linha indica que print()é necessário para o código funcionar. Se você omitir ou não recuar uma linha corretamente, o editor a destacará em vermelho e exibirá a seguinte mensagem de erro: "Esperado bloco recuado".

如果您还没有保存场景,可以将场景保存为sprite_2d.tscne pressione F6 (Cmd + R no macOS) para executá-lo. Visualize o painel inferior da saída expandida . Ele deve exibir "Hello, world!".

Depois de remover _init()a função, você fica com apenas uma linha de código.extends Sprite2D

Vire¶ _

Hora de mover e girar nossos nós. Para fazer isso, adicionaremos duas variáveis ​​de membro ao script: a velocidade do movimento [speed] em pixels/segundo e a velocidade angular [angular_speed] em radianos/segundo. extends Sprite2DAdicione o seguinte conteúdo após [GDScript] .

GDScriptGenericName
var velocidade = 400
var velocidade_angular = PI
C #
private int _speed = 400;
private float _angularSpeed ​​= Mathf.Pi;

As variáveis ​​de membro estão localizadas perto da parte superior do script, após qualquer linha de "expansão", mas antes das funções. Cada instância de nó com este script anexado terá sua própria cópia das propriedades speed e angular_speed.

Nota: Os ângulos em Godot são medidos em radianos por padrão, mas se você preferir calcular os ângulos em graus, existem funções e propriedades integradas disponíveis.

Para mover nosso ícone, precisamos atualizar sua posição e rotação [estado] a cada quadro no loop do jogo. Podemos usar Nodeas funções virtuais da classe _process(). Se você defini-lo em qualquer classe derivada de Node, como Sprite2D, Godot chamará a função a cada quadro e passará a ela um deltaparâmetro chamado , que é o tempo decorrido desde o quadro anterior.

NOTA: Os jogos funcionam renderizando muitas imagens por segundo, cada imagem é chamada de quadro e o fazem em um loop. Medimos a taxa na qual um jogo gera gráficos em quadros por segundo (FPS). Apontar para 60 FPS para a maioria dos jogos, embora você possa encontrar 30 FPS em dispositivos móveis mais lentos ou 90 a 240 FPS em jogos de realidade virtual.

Os desenvolvedores de mecanismos e jogos fazem o possível para atualizar o mundo do jogo e renderizar gráficos em intervalos constantes, mas sempre há pequenas variações nos tempos de renderização de quadros. É por isso que o mecanismo nos fornece esse valor de tempo delta para tornar nosso movimento independente de nossa taxa de quadros.

Na parte inferior do script, defina a função:

GDScriptGenericName
func _process(delta):
    rotação += velocidade_angular * delta
C #
public override void _Process(double delta)
{     Rotation += _angularSpeed ​​* (float)delta; }

A palavra-chave funcdefine uma nova função [GDScript]. Depois disso, devemos escrever o nome e os parâmetros da função entre colchetes. Os dois pontos terminam a definição e o bloco recuado seguinte é o conteúdo ou as instruções da função.

Observação: observe como _process()[semelhante a] _init(), começa com um sublinhado à esquerda. Por convenção, as funções virtuais do Godot, ou seja, funções integradas que você pode substituir para se comunicar com o mecanismo, começam com um sublinhado.

A linha de código na rotation += angular_speed * deltarotationNode2DSprite2D,função é aumentar a rotação do sprite [Sprite] a cada quadro. Aqui, [rotation] é um atributo herdado da classe [Node2D] e [Sprite2D class] é estendido. Ele controla a rotação do nosso nó e usa radianos.

Nota: No editor de código, você pode clicar com a tecla Ctrl pressionada em qualquer propriedade ou função integrada, como position, rotation, ou _processabrir o documento correspondente em uma nova guia.

Execute a cena para ver o ícone Godot girar no lugar.

Obs.: Em C#, cuidado com _Process()o parâmetro delta为double类型. Assim, ao aplicá-lo na rotação, precisamos convertê-lo parafloat。

Mover¶ _

Agora deixe os nós se moverem. Adicione as duas linhas a seguir dentro da função _process() , certificando-se de que as novas linhas sejam recuadas da mesma forma que as linhas anteriores a elas.rotation += angular * delta

GDScriptGenericName

var velocidade = Vector2.UP.rotated(rotação) * velocidade

posição += velocidade * delta

C #

var velocidade = Vector2.Up.Rotated(Rotation) * _speed;

Posição += velocidade * (float)delta;

Como já vimos, varuma palavra-chave define uma nova variável. Se você colocá-lo no início do seu script, ele definirá uma propriedade da classe. [Usado aqui] Dentro da função, define uma variável local: ela só existe dentro do escopo da função.

Definimos uma velocityvariável local chamada , que é um vetor bidimensional [Vector2] representando direção e velocidade. Para mover o nó para frente, Vector2.UPcomeçamos com uma constante da classe Vector2, um vetor ascendente, e  rotated()giramos chamando o método nele. Essa expressão Vector2.UP.rotated(rotation)【为】é um vetor apontando para frente em relação ao nosso ícone. Multiplicado por nossa speed propriedade, nos dá uma velocidade que podemos usar para mover o nó para frente.

Adicionamos [ velocity * deltaposition】à propriedade de posição do nó] para movê-lo. A própria posição [position] é um tipo Vector2 , que é um tipo embutido em Godot, representando um vetor 2D.

Execute a cena para ver Godot girando em círculos [efeito de corrida].

NOTA: Mover nós dessa forma não levará em consideração colisões com paredes ou pisos. Em seu primeiro jogo 2D , você aprenderá outra maneira de mover objetos enquanto detecta colisões.

Nossos nós atualmente se movem por conta própria. Na próxima seção  , Ouvindo a entrada do jogador , usaremos a entrada do jogador para controlá-la.

Roteiro completo¶

Aqui está o sprite_2d.gdarquivo completo para referência.

GDScriptGenericName

estende Sprite2D

var velocidade = 400
var velocidade_angular = PI


func _process(delta):
    rotação += velocidade_angular * delta

    var velocidade = Vector2.UP.rotated(rotação) * velocidade

    posição += velocidade * delta

C #

usando Godot;

classe parcial pública MySprite2D : Sprite2D
{     private int _speed = 400;     private float _angularSpeed ​​= Mathf.Pi;

    public override void _Process(double delta)
    {         Rotation += _angularSpeed ​​* (float)delta;         var velocidade = Vector2.Up.Rotated(Rotation) * _speed;

        Posição += velocidade * (float)delta;
    }
}

Acho que você gosta

Origin blog.csdn.net/drgraph/article/details/130794797
Recomendado
Clasificación