I sistemi di eventi sono sorprendenti, rendono il codice estremamente ingombrante e consentono davvero la creazione dinamica di giochi attraverso una facile comunicazione degli oggetti e del ciclo di gioco. Sto attraversando un periodo difficile con l'efficienza della mia attuale implementazione. Attualmente la mia leggera ottimizzazione nel separare le liste di oggetti dagli eventi a cui rispondono ha fatto meraviglie, ma dovrei fare di più.
Attualmente ho due metodi:
Più semplice: tutti gli oggetti vengono aggiunti a un vettore quando viene inviato un evento tutti gli oggetti vengono inviati tramite il suo metodo handle_event ()
Più complesso: ho una mappa con stringa come chiave e int come valore. Quando viene aggiunto un tipo di evento, viene aggiunto a questa mappa, con l'int semplicemente incrementato (deve esserci un modo migliore)
il vettore dei vettori degli oggetti, quindi rinvia un nuovo vettore per gestire quel tipo di evento.
Quando viene chiamato un evento, chiama semplicemente l'int corrispondente nella mappa eventTypes sul tipo all'interno del vettore dei vettori degli oggetti e invia quell'evento a ciascun oggetto che gestisce quel tipo di evento.
Questo primo metodo è piuttosto lento (ovviamente) per molti oggetti, ma abbastanza veloce per pochissimi oggetti. Considerando che il secondo metodo è abbastanza veloce con oggetti di grandi dimensioni che vorrebbero gestire diversi tipi di eventi, ma più lento del primo metodo per oggetto con oggetti che gestiscono lo stesso tipo di evento.
Esiste un modo più veloce (tempo di esecuzione)? C'è un modo più veloce per cercare un int dal tipo di stringa? (Inizialmente avevo un enum, ma non permettevo tipi personalizzati, che sono necessari a causa del livello desiderato di dinamismo.)