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 MoveBykelas, 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 MoveBytelah 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
Entityyang memiliki a PositionComponentdan aMoveByComponent
MoveBySystemyang mencari entitas dengan kedua komponen ini, dan menambahkan nilai MoveByComponentke PositionComponent. Ketika timetercapai, 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, MoveByComponentsama seperti di atas
MoveByCollectionComponentyang berisi larik MoveByComponents
MoveByCollectionSystemyang mencari entitas dengan a PositionComponentdan a MoveByCollectionComponent, beriterasi melalui huruf MoveByComponents 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 secondsdan move x by -10 in 2 secondsentitas akan berdiri diam?
MoveByfungsionalitas 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.