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.svg
do 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.gd
o 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 extends
define 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
, CanvasItem
e Node
.
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(): |
C# |
public MySprite2D() { GD.Print("Olá, mundo!"); } |
Vamos decompô-lo. A palavra-chave func
define 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.tscn
e 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 Sprite2D
Adicione 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 Node
as 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 delta
parâ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 func
define 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 * delta
rotation
Node2D
Sprite2D,
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 _process
abrir 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, var
uma 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 velocity
variável local chamada , que é um vetor bidimensional [Vector2] representando direção e velocidade. Para mover o nó para frente, Vector2.UP
começ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 * delta
position】
à 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.gd
arquivo completo para referência.
GDScriptGenericName |
estende Sprite2D var velocidade = 400
var velocidade = Vector2.UP.rotated(rotação) * velocidade posição += velocidade * delta |
C # |
usando Godot; classe parcial pública MySprite2D : Sprite2D public override void _Process(double delta) Posição += velocidade * (float)delta; |