Godot: Le mouvement KinematicBody2D ne met pas à jour la transformation de collision (seul le premier mouvement dans _fixed_process effectue des tests valides)

Créé le 16 mars 2017  ·  3Commentaires  ·  Source: godotengine/godot

Système d'exploitation ou appareil - Version Godot :
Windows 10 x64 - Godot 2.1.2.stable.official

Description du problème:
Après avoir déplacé un KinematicBody2D avec move(), les transformations Collider ne sont pas mises à jour.
Chaque mouvement ne sera testé qu'avec la position/transformation initiale du Collider.

Étapes à reproduire :

  • Configurer une scène avec 1 KinematicBody2D (A) et 1 StaticBody2D (B) avec CollisionShape2D rectangulaire
  • A est placé à gauche de B (peut avoir un espace <100px) et A et B CollisionSHapes sont 64px x 64px
  • ajouter un script à A avec code :
func _ready():
    set_fixed_process(true)

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

A se déplace seulement vers le bas, mais pas vers la droite.
Même si après avoir descendu, A se rangeait sous B.
Il devrait être sous B et devrait s'être déplacé en forme de L (d'abord vers le bas, puis vers la droite).
Move ne met pas à jour Colliders vers une nouvelle position, donc tout en essayant de se déplacer vers la droite, il semble être bloqué par B, comme ce serait le cas si nous nous déplacions uniquement vers la droite.

Solution de contournement:
remplacez _fixed_process par :

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

Commentaire le plus utile

Je pense que c'est un doublon de #7951, mais j'aimerais que @RandomShaper confirme :smiley:

Tous les 3 commentaires

Je pense que c'est un doublon de #7951, mais j'aimerais que @RandomShaper confirme :smiley:

Oui, c'est le même problème.

J'ai raté celui-là.
Merci.

Cette page vous a été utile?
0 / 5 - 0 notes