Godot: El movimiento KinematicBody2D no actualiza la transformación de colisión (solo el primer movimiento en _fixed_process realiza pruebas válidas)

Creado en 16 mar. 2017  ·  3Comentarios  ·  Fuente: godotengine/godot

Sistema operativo o dispositivo - Versión Godot:
Windows 10 x64 - Godot 2.1.2.estable.oficial

Descripcion del problema:
Después de mover un KinematicBody2D con move(), las transformaciones de Collider no se actualizan.
Cada movimiento solo probará con la posición/transformación inicial del Colisionador.

Pasos para reproducir:

  • Configure una escena con 1 KinematicBody2D (A) y 1 StaticBody2D (B) con CollisionShape2D rectangular
  • A se coloca a la izquierda de B (puede tener algo de espacio < 100 px) y A y B CollisionSHapes son 64 px x 64 px
  • agregue un script a A con 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 solo se mueve hacia abajo, pero no hacia la derecha.
Aunque después de moverse hacia abajo, A encajaría debajo de B.
Debería estar debajo de B y debería haberse movido en forma de L (primero hacia abajo, luego hacia la derecha).
Move no actualiza Colliders a una nueva posición, por lo que al intentar moverse a la derecha, parece estar bloqueado por B, como lo estaría si solo nos moviéramos a la derecha.

Solución alterna:
cambie _fixed_process a:

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

Comentario más útil

Creo que esto es un duplicado de #7951, pero me gustaría tener @RandomShaper para confirmar :smiley:

Todos 3 comentarios

Creo que esto es un duplicado de #7951, pero me gustaría tener @RandomShaper para confirmar :smiley:

Sí, es el mismo problema.

Me perdí ese.
Gracias.

¿Fue útil esta página
0 / 5 - 0 calificaciones