Saya cukup baru dengan gagasan sistem entitas, setelah membaca banyak hal (yang paling bermanfaat, blog yang hebat ini dan jawaban ini ).
Meskipun saya mengalami sedikit kesulitan memahami bagaimana sesuatu yang sederhana seperti mampu memanipulasi posisi suatu objek oleh sejumlah sumber yang tidak ditentukan.
Artinya, saya memiliki entitas saya, yang memiliki komponen posisi. Saya kemudian memiliki beberapa peristiwa dalam permainan yang memberitahu entitas ini untuk bergerak jarak tertentu, dalam waktu tertentu.
Peristiwa ini dapat terjadi kapan saja, dan akan memiliki nilai yang berbeda untuk posisi dan waktu. Hasilnya adalah mereka dipersatukan.
Dalam solusi OO tradisional, saya akan memiliki semacam MoveBy
kelas, yang berisi jarak / waktu, dan array yang ada di dalam kelas objek permainan saya. Setiap frame, saya akan mengulangi semua MoveBy
, dan menerapkannya pada posisi. Jika a MoveBy
telah mencapai waktu selesai, hapus dari array.
Dengan sistem entitas, saya sedikit bingung bagaimana saya harus meniru perilaku semacam ini.
Jika ada satu saja pada satu waktu, alih-alih dapat menggabungkan mereka, itu akan sangat mudah (saya percaya) dan terlihat seperti ini:
PositionComponent
mengandung x, y
MoveByComponent
mengandung x, y, time
Entity
yang memiliki a PositionComponent
dan aMoveByComponent
MoveBySystem
yang mencari entitas dengan kedua komponen ini, dan menambahkan nilai MoveByComponent
ke PositionComponent
. Ketika time
tercapai, itu menghapus komponen dari entitas itu.
Saya agak bingung bagaimana saya akan melakukan hal yang sama dengan banyak yang pindah.
Pikiran awal saya adalah bahwa saya akan memiliki:
PositionComponent
, MoveByComponent
sama seperti di atas
MoveByCollectionComponent
yang berisi larik MoveByComponent
s
MoveByCollectionSystem
yang mencari entitas dengan a PositionComponent
dan a MoveByCollectionComponent
, beriterasi melalui huruf MoveByComponent
s di dalamnya, menerapkan / menghapus seperlunya.
Saya kira ini adalah masalah yang lebih umum, memiliki banyak komponen yang sama, dan menginginkan sistem yang sesuai untuk bertindak masing-masing. Entitas saya mengandung komponen mereka di dalam tipe komponen hash -> komponen, jadi hanya memiliki 1 komponen tipe tertentu per entitas.
Apakah ini cara yang tepat untuk melihat ini?
Haruskah entitas hanya memiliki satu komponen dari tipe tertentu setiap saat?
move x by 10 in 2 seconds
dan move x by -10 in 2 seconds
entitas akan berdiri diam?
MoveBy
fungsionalitas adalah jenis hanya kecepatan? Sepertinya Anda berada di jalur yang benar. Untuk pertanyaan kedua Anda, ada banyak implementasi sistem entitas / komponen yang berbeda. Yang dijelaskan dalam jawaban saya yang Anda tautkan hanya akan memiliki satu komponen dari jenis yang diberikan.