Godot: لا تؤدي حركة KinematicBody2D إلى تحديث تحويل الاصطدام (الخطوة الأولى فقط في _fixed_process تقوم باختبار صالح)

تم إنشاؤها على ١٦ مارس ٢٠١٧  ·  3تعليقات  ·  مصدر: godotengine/godot

نظام التشغيل أو الجهاز - إصدار Godot:
Windows 10 x64 - Godot 2.1.2.stable.official

وصف المشكلة:
بعد نقل KinematicBody2D مع الحركة () ، لا يتم تحديث تحويلات المصادم.
سيتم اختبار كل حركة فقط من خلال موضع / تحول المصادم الأولي.

خطوات التكاثر:

  • قم بإعداد مشهد باستخدام 1 KinematicBody2D (A) و 1 StaticBody2D (B) مع CollisionShape2D المستطيل
  • يتم وضع A من اليسار إلى B (يمكن أن تحتوي على مسافة أقل من 100 بكسل) و A و B CollisionSHapes هي 64 بكسل × 64 بكسل
  • أضف نصًا إلى A برمز:
func _ready():
    set_fixed_process(true)

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

يتحرك A فقط لأسفل ، ولكن ليس إلى اليمين.
على الرغم من أنه بعد الانتقال لأسفل ، فإن "أ" سوف يلائم المستوى "ب".
يجب أن يكون تحت B ويجب أن يتحرك على شكل حرف L (لأسفل أولاً ، ثم لليمين).
لا يقوم Move بتحديث Colliders إلى موضع جديد ، لذلك أثناء محاولة التحرك بشكل صحيح ، يبدو أنه تم حظره بواسطة B ، كما سيكون ، إذا انتقلنا إلى اليمين فقط.

الحل:
تغيير _ fixed_process إلى:

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

التعليق الأكثر فائدة

أعتقد أن هذه نسخة مكررة من # 7951 ، لكني أرغب في الحصول على RandomShaper للتأكيد: مبتسم:

ال 3 كومينتر

أعتقد أن هذه نسخة مكررة من # 7951 ، لكني أرغب في الحصول على RandomShaper للتأكيد: مبتسم:

نعم ، إنها نفس المشكلة.

لقد فاتني ذلك.
شكرا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات