Etkinlik Sistemleri şaşırtıcıdır, son derece hantal bir kod uydururlar ve nesnelerin ve oyun döngüsünün kolay iletişimi yoluyla oyunların dinamik olarak oluşturulmasına gerçekten izin verirler. Mevcut uygulamamın verimliliği ile zor anlar yaşıyorum. Şu anda, nesne listelerini yanıtladıkları olaylara ayırma konusundaki küçük optimizasyonum harikalar yaptı, ancak yapabileceğim daha çok şey olmalı.
Şu anda iki yöntemim var:
En basit: bir olay gönderildiğinde tüm nesneler bir vektöre eklenir Tüm nesneler olayı handle_event () yöntemiyle gönderir
Daha karmaşık: Ben anahtar ve int değeri olarak int ile bir harita var. Bir olay türü eklendiğinde, bu haritaya int eklenir (daha iyi bir yol olmalı)
, daha sonra nesnelerin vektörleri vektörü bu tür olayı işlemek için yeni bir vektörü geri iter.
Bir olay çağrıldığında, eventTypes eşlemesindeki ilgili int'i yalnızca nesne vektörlerinin vektörü içindeki türe çağırır ve o olayı, o olay türünü işleyen her nesneye gönderir.
Bu ilk yöntem, çok sayıda nesne için oldukça yavaş (açıkçası), ancak çok az sayıda nesne için oldukça hızlıdır. İkinci yöntem, farklı olay türlerini işlemek isteyen büyük nesnelerle oldukça hızlıdır, ancak aynı tür olayı işleyen nesnelerle nesne başına ilk yöntemden daha yavaştır.
Daha hızlı (çalışma süresi açısından) bir yol var mı? Dize türünden bir int aramanın daha hızlı bir yolu var mı? (Başlangıçta bir enum vardı, ancak istenen dinamizm seviyesi nedeniyle gerekli olan özel türlere izin vermedi.)