Tôi đã quan tâm đến hệ thống thực thể dựa trên thành phần trong một thời gian và đọc vô số bài viết về nó (Các trò chơi Insomiac , Evolve Your HVELy tiêu chuẩn , T-Machine , Chronoclast ... chỉ để nêu tên một số).
Tất cả chúng dường như có một cấu trúc bên ngoài của một cái gì đó như:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
Và nếu bạn nảy ra ý tưởng về dữ liệu được chia sẻ (đây là thiết kế tốt nhất tôi từng thấy cho đến nay, về mặt không trùng lặp dữ liệu ở mọi nơi)
e.GetProperty<string>("Name").Value = "blah";
Vâng, điều này rất hiệu quả. Tuy nhiên, nó không chính xác là dễ đọc hoặc viết nhất; nó cảm thấy rất cồng kềnh và chống lại bạn.
Cá nhân tôi muốn làm một cái gì đó như:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
Mặc dù tất nhiên, cách duy nhất để có được kiểu thiết kế đó là quay lại Entity-> NPC-> Enemy-> FlyingEnemy-> FlyingEnemyWithAHatOn loại phân cấp mà thiết kế này cố gắng tránh.
Có ai nhìn thấy một thiết kế cho loại hệ thống thành phần này vẫn linh hoạt, nhưng vẫn duy trì mức độ thân thiện với người dùng? Và đối với vấn đề đó, quản lý để có được xung quanh lưu trữ dữ liệu (có lẽ là vấn đề khó khăn nhất) một cách tốt?
Những thiết kế nào dành cho một hệ thống thực thể dựa trên thành phần thân thiện với người dùng nhưng vẫn linh hoạt?