Saya mencoba merancang sistem entitas berbasis komponen untuk tujuan pembelajaran (dan kemudian digunakan pada beberapa game) dan saya mengalami beberapa masalah ketika memperbarui status entitas.
Saya tidak ingin memiliki metode pembaruan () di dalam Komponen untuk mencegah dependensi antara Komponen.
Apa yang saya pikirkan saat ini adalah bahwa komponen menyimpan data dan komponen pembaruan sistem.
Jadi, jika saya memiliki permainan 2D sederhana dengan beberapa entitas (misalnya pemain, musuh1, musuh2) yang memiliki komponen Transform, Movement, State, Animation dan Rendering, saya pikir saya harus memiliki:
- Suatu MovementSystem yang menggerakkan semua komponen Gerakan dan memperbarui komponen Negara
- Dan RenderSystem yang memperbarui komponen Animasi (komponen animasi harus memiliki satu animasi (yaitu seperangkat bingkai / tekstur) untuk setiap negara bagian dan memperbarui itu berarti memilih animasi yang sesuai dengan keadaan saat ini (misalnya melompat, bergerak, bergerak, dll), dan memperbarui indeks bingkai). Kemudian, RenderSystem memperbarui komponen Render dengan tekstur yang sesuai dengan bingkai saat ini dari masing-masing entitas Animasi dan menampilkan semuanya di layar.
Saya telah melihat beberapa implementasi seperti kerangka kerja Artemis, tapi saya tidak tahu bagaimana menyelesaikan situasi ini:
Katakanlah permainan saya memiliki entitas berikut. Setiap entitas memiliki serangkaian negara dan satu animasi untuk setiap negara:
- pemain: "idle", "moving_right", "jumping"
- musuh1: "moving_up", "moving_down"
- musuh2: "moving_left", "moving_right"
Apa pendekatan yang paling diterima untuk memperbarui keadaan saat ini dari setiap entitas? Satu-satunya hal yang dapat saya pikirkan adalah memiliki sistem yang terpisah untuk setiap kelompok entitas dan komponen Negara dan Animasi terpisah sehingga saya akan memiliki PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ... tapi saya pikir ini buruk solusi dan mematahkan tujuan memiliki sistem berbasis komponen.
Seperti yang Anda lihat, saya sangat tersesat di sini, jadi saya sangat menghargai bantuan apa pun.
EDIT: Saya pikir solusi untuk membuat ini berfungsi seperti yang saya inginkan adalah yang ini:
Anda membuat komponen statistik dan komponen animasi cukup umum untuk digunakan untuk semua entitas. Data yang dikandungnya akan menjadi pengubah untuk mengubah hal-hal seperti animasi yang dimainkan atau yang menyatakan tersedia. - Byte56
Sekarang, saya mencoba mencari cara untuk mendesain 2 komponen ini cukup umum sehingga saya dapat menggunakannya kembali. Mungkinkah memiliki UID untuk setiap negara bagian (mis. Berjalan, berlari ...) dan menyimpan animasi di peta ke dalam AnimationComponent yang dikunci oleh pengenal ini menjadi solusi yang baik?
statecomponent
dan animationcomponent
cukup umum untuk digunakan untuk semua entitas. Data yang dikandungnya akan menjadi pengubah untuk mengubah hal-hal seperti animasi yang dimainkan atau yang menyatakan tersedia.