Godot: O movimento KinematicBody2D não atualiza o Collision Transform (somente o primeiro movimento em _fixed_process faz testes válidos)

Criado em 16 mar. 2017  ·  3Comentários  ·  Fonte: godotengine/godot

Sistema operacional ou dispositivo - versão Godot:
Windows 10 x64 - Godot 2.1.2.stable.official

Descrição do problema:
Após mover um KinematicBody2D com move(), as transformações do Collider não são atualizadas.
Cada movimento será testado apenas com a posição/transformação inicial do Collider.

Passos para reproduzir:

  • Configure uma cena com 1 KinematicBody2D (A) e 1 StaticBody2D (B) com CollisionShape2D retangular
  • A é colocado à esquerda para B (pode ter algum espaço < 100px) e A e B CollisionSHapes são 64px x 64px
  • adicione um script a A com código:
func _ready():
    set_fixed_process(true)

func _fixed_process(delta):
    move(Vector2(0, 100))
    move(Vector2(100, 0))
    set_fixed_process(false)

A só se move para baixo, mas não para a direita.
Mesmo que depois de descer, A caberia sob B.
Deve estar sob B e deve ter se movido em forma de L (primeiro para baixo, depois para a direita).
O movimento não atualiza os Colliders para uma nova posição, então, ao tentar mover para a direita, parece ser bloqueado por B, como seria, se apenas nos movimentássemos para a direita.

Gambiarra:
altere _fixed_process para:

func _fixed_process(delta):
    move(Vector2(0, 100))
    var st = get_shape_transform(0) # get current shape transform, assuming we only have 1 shape
    st.o += get_travel() # add move translation to shape transform
    set_shape_transform(0, st) # update shape transform
    move(Vector2(100, 0))
        # you should reset the shape transform to its original state befor returing
    set_fixed_process(false)
archived

Comentários muito úteis

Eu acho que isso é duplicado de # 7951, mas eu gostaria de ter @RandomShaper para confirmar :smiley:

Todos 3 comentários

Eu acho que isso é duplicado de # 7951, mas eu gostaria de ter @RandomShaper para confirmar :smiley:

Sim, é a mesma questão.

Eu perdi aquele.
Obrigado.

Esta página foi útil?
0 / 5 - 0 avaliações