Godot: Gerakan KinematicBody2D tidak memperbarui Transformasi Tabrakan (hanya gerakan pertama dalam _fixed_process yang melakukan pengujian yang valid)

Dibuat pada 16 Mar 2017  ·  3Komentar  ·  Sumber: godotengine/godot

Sistem operasi atau perangkat - versi Godot:
Windows 10 x64 - Godot 2.1.2.stable.official

Deskripsi masalah:
Setelah memindahkan KinematicBody2D dengan move(), transformasi Collider tidak diperbarui.
Setiap gerakan hanya akan diuji dengan posisi/transformasi Collider awal.

Langkah-langkah untuk mereproduksi:

  • Siapkan adegan dengan 1 KinematicBody2D (A) dan 1 StaticBody2D (B) dengan CollisionShape2D persegi panjang
  • A ditempatkan kiri ke B (dapat memiliki beberapa ruang <100px) dan A dan B CollisionSHapes adalah 64px x 64px
  • tambahkan skrip ke A dengan kode:
func _ready():
    set_fixed_process(true)

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

A hanya bergerak ke bawah, tetapi tidak ke kanan.
Meskipun setelah bergerak ke bawah, A akan muat di bawah B.
Itu harus di bawah B dan seharusnya bergerak dalam bentuk-L (pertama ke bawah, lalu ke kanan).
Pindah tidak memperbarui Collider ke posisi baru, jadi ketika mencoba bergerak ke kanan, tampaknya terhalang oleh B, seperti yang akan terjadi, jika kita hanya bergerak ke kanan.

Solusi:
ubah _fixed_process menjadi:

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

Komentar yang paling membantu

Saya pikir ini duplikat dari #7951, tetapi saya ingin @RandomShaper mengonfirmasi :smiley:

Semua 3 komentar

Saya pikir ini duplikat dari #7951, tetapi saya ingin @RandomShaper mengonfirmasi :smiley:

Ya, itu masalah yang sama.

Aku merindukan yang itu.
Terima kasih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat