![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
да проще всего иметь что-то вроде TimedAction, которое отнимает тики от счетчика внутри себя.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#12 |
Форумчанин
Регистрация: 06.10.2011
Сообщений: 181
|
![]()
Пепел Феникса, так и попробовал сделать, но что-то пошло не так.
Попробовал создать класс колекции а-ля SortedList, но с учетом того, что ключ может быть одинаковым (правильнее наверное было построить на паре "ключ-значение"). Вот он: Код:
Код:
Код:
P.S. Если кому интересно, то приложил проект. |
![]() |
![]() |
![]() |
#13 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
а зачем коллекция? моб может выполнять несколько действий одновременно?
или вам для последовательности? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#14 |
Форумчанин
Регистрация: 06.10.2011
Сообщений: 181
|
![]()
Для последовательности. Так сказать очередь.
Очередь сортируется по int-овой переменной, обозначающей задержку. Потом, когда таймер подсчитывает до нужного значения в этой int-овой переменной, то заставляет моба исполнить действие, удаляет его из очереди, и отнимает у оставшихся в очереди время, которое уже прошло. Хотя в одном месте я махнулся... Когда я добавляю событие, то надо к нему еще приплюсовывать текущее время задержки. Может имеет смысл добавлять и удалять действия так же в таймере. Допустим, сначала сохранять время и моба в какой-нибудь List<Tuple<int, Mob>, а потом из него в таймера закидывать в очередь? Последний раз редактировалось max_prorok; 24.06.2016 в 19:35. |
![]() |
![]() |
![]() |
#15 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
у вас просто последовательность, какая сортировка то?
вы же не выполняете всегда самое короткое действие? и да, Tuple вам не нужен. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#16 |
Форумчанин
Регистрация: 06.10.2011
Сообщений: 181
|
![]()
Почему? Я их сортирую на этапе добавления в коллекцию
Последний раз редактировалось max_prorok; 24.06.2016 в 22:31. |
![]() |
![]() |
![]() |
#17 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
я и говорю, зачем сортировка?
у вас очередь действий или они все идут одновременно? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#18 |
Форумчанин
Регистрация: 06.10.2011
Сообщений: 181
|
![]()
Очередь действий.
Это просто у меня пример рассмотрен такой, когда в одно и тоже время допустим должно произойти несколько событий. Например, так получилось что в одно и тоже время, один моб переходит на соседнюю клетку, у другого закончился задержка после удара, а третий закончил каст спела. |
![]() |
![]() |
![]() |
#19 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
так, вы очередь действий храните в мире выходит.
вам в любом случае очередь тут не сильно важна, просто список, что кончилось удаляете(или помечаете) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#20 |
Форумчанин
Регистрация: 06.10.2011
Сообщений: 181
|
![]()
Я просто думал, это делать именно в виде сортировке в самом начале, чтобы в обработчике таймера код занимал как можно меньше времени. А то пока он найдет в коллекции нужную строчку, то пройдет больше времени, чем выберет просто первую. Не исключаю, что вы правы. Попробую тогда написать попроще, через Dictionary<Mob,int>.
Или же все-таки использовать List<>, дабы время не тратить на перевод в хэш-код? Хотя на данном этапе пожалуй лучше об этом не думать. Оптимизацию оставить на потом |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Снова я и снова геморрой, только уже с многопоточностью | FleXik | Общие вопросы Delphi | 26 | 07.07.2013 16:48 |
Неблокирующий сокет Си проблема с закрытием, проблема с закрытием сокетов в цикле | mnx_vol | C/C++ Сетевое программирование | 0 | 06.11.2012 13:57 |
нужно разобраться с многопоточностью с ThRead Object | Толян1 | C++ Builder | 1 | 16.07.2012 09:52 |
Проблема с многопоточностью | Kapitan4ik | Работа с сетью в Delphi | 3 | 29.02.2012 21:46 |