Bu sorunun birkaç kez sorulduğunu biliyorum, ancak bileşen tabanlı bir motorda giriş işlemeyi nasıl uygulayacağımdan hala emin değilim.
Kullandığım bileşen tabanlı tasarım T = Machine'in blog serisine ve Varlıkların sadece id olduğu Artemis'e dayanıyordu .
Girdi işlemeyi uygulamada üç temel fikrim var:
- Giriş bileşeni, ilgilendiği etkinlikleri tutacaktır. Giriş sistemi, anahtar ve fare olaylarını oyun olaylarına çevirecek ve giriş bileşeniyle varlıklar arasında geçiş yapacak ve eğer olayla ilgileniyorlarsa giriş sistemi tarafından uygun bir eylem gerçekleştirilecektir. Bu eylem giriş sistemine sabit olarak kodlanır.
- Giriş bileşeni yok. Belirli olaylara sahip varlıkları giriş sistemine kaydedersiniz. Girdi sistemi daha sonra uygun eylemi gerçekleştirebilmek için diğer sistemlere ileti (varlık kimliği ve olay türüyle birlikte) gönderir. Veya ilk durumda olduğu gibi, eylemler giriş sistemine sabit olarak kodlanır.
- İlk yönteme benzer şekilde, ancak eylemi girdi sistemine sabit olarak kodlamak yerine, bileşen
std::map<std::function>
girdi sistemi tarafından çağrılacak olan işlevlere (yani ) ilişkin bir olaylar haritası içerecektir . Bu, aynı olayı farklı eylemlerle birleştirebilme özelliğine sahiptir.
Yukarıdaki yöntemlerden herhangi birini önerir misiniz veya esnek bir girdi işleme sistemi uygulamama yardımcı olacak önerileriniz var mı? Ayrıca, henüz çok iş parçacığına aşina değilim ama uygulamayı iş parçacığı dostu yapacak herhangi bir öneri de bekliyoruz.
Not: Uygulamanın yerine getirmesini istediğim bir ek gereksinim, aynı girişi, örneğin bir kamera objesini ve oynatıcıyı aynı anda taşımak gibi birçok objeye aktarabileceğim.