Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 2 / 2
Регистрация: 23.02.2012
Сообщений: 208

Отложенная обработка событий

14.08.2014, 19:59. Показов 1926. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, предположим, у нас есть Логика и Отображение. Отображение подписано на событие НовыйОбъект, рассылаемое Логикой и когда оно происходит Отображение рендерит новый объект. Это означает, что метод Отображения, рендерящий НовыйОбъект, будет вызван непосредственно при выполнении кода Логики. Мне это не нравится по религиозным причинам, хотелось бы, что бы код Отображения выполнялся только когда придет его черед, а не во время выполнения Логики. Пока решил создать List и добавлять туда НовыеОбъекты во время выполнения Логики, а после перебирать его в цикле и рендерить НовыеОбъекты. Между итерациями List очищается. Я не уверен на сколько это медленнее чем события, но то что менее удобно - это точно. Есть ли другие способы?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2014, 19:59
Ответы с готовыми решениями:

Обработка событий
Есть событие. Есть метод-обработчик события, в котором полученные данные обрабатываются и результат пишется в файл. Подскажите...

Обработка событий
Создать визуальную форму для работы. Форма должна содержать поля для ввода данных, кнопку для вычислений и поле для вывода результатов. ...

обработка событий мыши
если на форме находится Picturebox необходимо если левой кнопкой мыши на него щелкнуть и не отпуская перемещать затем отпустить Picturebox...

3
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
14.08.2014, 20:28
Цитата Сообщение от PlutDem Посмотреть сообщение
что бы код Отображения выполнялся только когда придет его черед, а не во время выполнения Логики.
Труднопонятная мысль. Вызов всегда должен рендерить новый объект, это кит программирования. В других случаях, применяются контейнеры.
0
2 / 2 / 2
Регистрация: 23.02.2012
Сообщений: 208
14.08.2014, 21:11  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Logic
{
    public List<Bomb> Bombs = new List<Bomb>();
 
    public void Update()
    {
        foreach (var bomb in Bombs)
        {
            bomb.Update();
        }
    }
}
class Bomb
{
    public delegate void BombDelegate(Bomb bomb);
    public event BombDelegate OnBombExlosion;
 
    public int Timer;
 
    public void Update()
    {
        if (Timer == 0) OnBombExlosion(this);
    }
}
 
class Render
{
    public void RenderBombExlosion(Bomb bomb)
    {
        // render
    }
}
Представьте, что таймер на Бомбе истек и она взорвалась на стороне Логики В этом случае тут же будет вызван метод рендера отвечающий за отображение взрыва. Мне бы хотелось, что бы рендер отрабатывал только после завершения обработки логики. Мало ли, может в последствии выяснится, что взорвались и другие бомбы, а значит нужно нарисовать взрыв побольше.
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
15.08.2014, 11:49
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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)
    {
        // и тут рендерим все сдетонировавшие бомбы
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2014, 11:49
Помогаю со студенческими работами здесь

Создание и обработка событий
Всем добрый день. К данной программе нужно создать какое либо событие. Тема: Создание и обработка событий. Цель работы: Закрепить...

Обработка событий в UserControl
Интересует как лучше согласно принципап ООП обработать из формы событие , которое происходит в расположенном на этой форме UserControl (...

Динамическая форма и обработка событий
Доброго времени суток. Возникала потребность динамического создания формы и компонентов на ней, и сотвественно обработки событий, но...

Динамическое создание и обработка событий
Здравствуйте. Помогите разобраться, как в С# создаются события. Ситуация такая: Есть демка проекта. Во время запуска демки она...

Обработка событий вне класса
Здравствуйте. Помогите оценить и дополнить решение. Суть такая: есть 3-4 таблицы, с похожей структурой. В частности, в них есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru