Eu estava assistindo um tutorial e segui o código igual ao do vídeo, mas o tutorial é para godot 3.2 e estando no godot 4 não funciona ao atacar o inimigo e recebo um erro que diz: Chamada inválida. Função inexistente 'move_toward' na base 'bool'. Este é o código:
extends CharacterBody2D
var knockback = Vector2.ZERO
func _physics_process(delta):
knockback = knockback.move_toward(Vector2.ZERO, 200 * delta)
knockback = move_and_slide(knockback)
func _on_hurtbox_area_entered(area):
knockback = Vector2.RIGHT * 200
Tentei excluir os argumentos move_and_slide e tentei alterar move_toward para move_and_slide mas não funcionou
O que está acontecendo é que
move_and_slide
retornabool
(true
se colidiu,false
se não).Assim, aqui:
A
knockback
variável se torna umbool
. Assim, no próximo quadro, quando você tentar fazer isso:Godot não pode chamar
move_toward
umbool
e dá um erro.Você teria recebido o erro antes se criasse
knockback
uma variável digitada, que seria explicitamente assim:Ou implicitamente (com inferência) assim:
Além disso, como você sabe, no Godot 4
move_and_slide
não é mais necessária uma velocidade; em vez disso, você deve definir avelocity
propriedade. O que significa que você poderia evitar não ter umaknockback
variável.O código seria assim:
Aqui a linha utilizada
move_toward
está realizando desaceleração.Presumivelmente, você terá outra manipulação de código
velocity
, portanto, verifique novamente se ainda não está fazendo a desaceleração (nesse caso, você não precisa fazer isso aqui) e se adicionar a desaceleração, não mexa em mais nada.