Systemy zdarzeń są niesamowite, sprawiają, że kodowanie jest wyjątkowo niewygodne i naprawdę pozwala na dynamiczne tworzenie gier poprzez łatwą komunikację obiektów i pętli gry. Mam trudności z wydajnością mojego obecnego wdrożenia. Obecnie moja niewielka optymalizacja podziału list obiektów na zdarzenia, na które odpowiadają, dokonała cudów, ale mogę zrobić więcej.
Obecnie mam dwie metody:
Najprostsze: wszystkie obiekty są dodawane do wektora, gdy wysyłane jest zdarzenie, wszystkie obiekty są wysyłane zdarzeniem za pomocą metody handle_event ()
Bardziej skomplikowane: mam mapę z ciągiem znaków jako kluczem i liczbą całkowitą jako wartością. Gdy dodawany jest typ zdarzenia, jest on dodawany do tej mapy, przy czym int jest po prostu zwiększany (musi być lepszy sposób)
wektor wektorów obiektów, a następnie wypycha nowy wektor, aby obsłużyć tego typu zdarzenie.
Gdy wywoływane jest zdarzenie, po prostu wywołuje odpowiednią int w odwzorowaniu eventTypes do typu wewnątrz wektora wektorów obiektów i wysyła to zdarzenie do każdego obiektu obsługującego ten typ zdarzenia.
Ta pierwsza metoda jest dość wolna (oczywiście) dla wielu obiektów, ale dość szybka dla bardzo niewielu obiektów. Natomiast druga metoda jest dość szybka w przypadku dużych obiektów, które chciałyby obsługiwać różne typy zdarzeń, ale wolniej niż pierwsza metoda na obiekt z obiektami obsługującymi ten sam typ zdarzenia.
Czy istnieje szybszy (rozsądny w czasie) sposób? Czy istnieje szybszy sposób na wyszukanie int z typu ciągu? (Początkowo miałem wyliczenie, ale nie pozwalało na niestandardowe typy, które są konieczne ze względu na pożądany poziom dynamiki).