E sim, mais links para artigos subsequentes serão fornecidos.
Código Base
Para que o personagem obedeça à física, você precisa chamar move_and_slide () no método _process () ou _physics_process ().
Em todo o código a seguir, usarei a digitação estática.
extends KinematicBody2D
# gdscript , python
var velocity: Vector2 = Vector2.ZERO # .
#
#
func _physics_process(_delta: float) -> void:
#
self.velocity = self.move_and_slide(self.velocity, Vector2(0, -1))
# .
# - , .
# .
Este código será suficiente para fazer qualquer objeto KinematicBody2D mover-se dependendo de colisões com outros objetos, mas é impossível controlar este objeto, principalmente em plataformas este objeto ainda não pode cair. Para que o objeto comece a cair, você precisa aumentar o valor de self.velocity.y por um valor positivo. O fato é que Godot Engine calcula ambas as coordenadas do canto superior esquerdo para o inferior direito no modo 2D. Para que o objeto caia, você precisa adicionar algo à aceleração. Eu geralmente uso a constante GRAVITY, que é fornecida no início do programa. A seguir, o código será apresentado com alterações para que o objeto caia.
extends KinematicBody2D
const GRAVITY: int = 40
# 40 ,
var velocity: Vector2 = Vector2.ZERO #
func _physics_process(_delta: float) -> void:
#
#
self.velocity.y += GRAVITY
# _delta , self.move_and collide
self.velocity = self.move_and_slide(self.velocity, Vector2(0, -1))
# , . .
O controle de movimentação deve ser implementado em um método separado, para não complicar muito 1 método. Além disso, ninguém pode suportar a repetição do mesmo código em um artigo 33 vezes.
Em movimento
Recentemente, aprendi uma maneira interessante de controlar um personagem, que se tornou uma alternativa ao primeiro método que dominei. A seguir, mostrarei os dois métodos:
- A primeira e nova maneira para mim
func move_character() -> void: var direction: float = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left") # # (+ x, 0 1) (- x, 0 1). # = 0, < 0 , # , . self.velocity.x = direction * MOVE_SPEED # . # const MOVE_SPEED = # const GRAVITY
- Segunda via
func move_character() -> void: # var direction: float = 0 if Input.is_action_pressed("ui_left"): direction = -1 elif Input.is_action_pressed("ui_right"): direction = 1 else: direction = 0 self.velocity.x = direction * MOVE_SPEED # const MOVE_SPEED = # # const GRAVITY
Pulo
O salto é realizado quase tão facilmente e sem ambigüidade quanto o primeiro método de movimento. Para fazer isso, você precisa criar uma constante de força de salto, como a velocidade do movimento no início, e definir um valor maior que o valor da gravidade. Vamos direto ao código do programa:
func jump() -> void:
if self.is_on_floor(): # , .
# ,
if Input.is_action_pressed("ui_jump"): #
# ui_jump .
# "ui_up"
self.velocity.y -= JUMP_POWER
# const JUMP_POWER...
Resta apenas desenhar um mapa, adicionar colisões e outras coisas que não estão diretamente relacionadas com o código principal e para o personagem do jogo será finalmente possível organizar uma corrida pelos locais, mas isso ainda será uma outra hora, porque até agora não descobri como explicar mais corretamente. , e isso está além do escopo da mensagem.