Отложенная обработка событий - C#
Формулировка задачи:
Здравствуйте, предположим, у нас есть
Логика
иОтображение
. Отображение подписано на событиеНовыйОбъект
, рассылаемоеЛогикой
и когда оно происходитОтображение
рендерит новый объект. Это означает, что методОтображения
, рендерящийНовыйОбъект
, будет вызван непосредственно при выполнении кодаЛогики
. Мне это не нравится по религиозным причинам, хотелось бы, что бы кодОтображения
выполнялся только когда придет его черед, а не во времявыполнения
Логики
. Пока решил создать List и добавлять тудаНовыеОбъекты
во время выполнения Логики, а после перебирать его в цикле и рендеритьНовыеОбъекты
. Между итерациями List очищается. Я не уверен на сколько это медленнее чем события, но то что менее удобно - это точно. Есть ли другие способы?Решение задачи: «Отложенная обработка событий»
textual
Листинг программы
class Logic { public event BombExplosion; public List<Bomb> Bombs = new List<Bomb>(); public BombBoom(Bomb b) { //тут происходит обработка логики взрыва и помечаем все бомбы, которые взорвались // статусом "Взрывается" foreach(Bomb b in this){ if(...) b.status = BompStatus.Detoneted; } //только после обработки вызываем метод/событие if(BombExplosion!=null) BombExplosion(this.Where(w=>w.status == BompStatus.Detoneted).ToList()); } } public enum BompStatus{ Visible, Unvisible, Detoneted, Destroyed } class Bomb { public BompStatus status } class Render { public void RenderBombExplosion(Bombs bomb) { // и тут рендерим все сдетонировавшие бомбы } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д