|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
|||||||
Менеджер состояний (Пауза в играх)05.09.2012, 11:27. Показов 2063. Ответов 14
Метки нет (Все метки)
Набрел на статью "Пишем игровой движок". И вот цитата оттуда:
0
|
|||||||
| 05.09.2012, 11:27 | |
|
Ответы с готовыми решениями:
14
Менеджер состояний игры Пауза на 7 секунд или пауза до нажатия клавиши Синий экран в онлайн играх, в офлайн играх синего экрана нет |
|
Модератор
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
|
||||
| 05.09.2012, 11:46 | ||||
|
В данном случае возможно стоит применить другой подход. Вычислять текущее время каждый раз, когда это будет актуально. Для этого используем getTimer.
1
|
||||
|
214 / 80 / 2
Регистрация: 31.05.2011
Сообщений: 258
|
|
| 05.09.2012, 12:13 | |
|
Фактически при паузе вам необходимо останавливать все звуки, ставить на паузу запущенные эффекты, ставить на паузу все таймеры и (если необходимо) отображать диалог паузы в игре. Для централизованного контроля всех этих штук можно создать сервисы (сервис по контролю над всеми звуками, сервис который контролирует эффекты и т.д.) и подписать их на событие в каком-нить глобальном контейнере, сообщающее нам, что пауза включена (или отключена). После диспетчерезации этого события, все подписанные на него сервисы принимают необходимые меры для обеспечения функционала паузы.
1
|
|
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
||||||
| 05.09.2012, 12:19 [ТС] | ||||||
|
То есть создаем класс StateManager. При создании любых объектов, они добавляются в некий массив, который будет доступен классу StateManager. При изменении состояния класс StateManager отслеживает это и на каждый объект ставит паузу. Так?
0
|
||||||
|
Модератор
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
|
|
| 05.09.2012, 12:42 | |
|
Defake, нет, в этом случае у вас получится большая связанность между различными узлами программы. А каждый модуль должен быть в какой-то степени самодостаточным. Так что все необходимые приготовления должны быть произведены внутри каждого модуля. А т.к. внутри у вас есть ссылки на все интересующие объекты, то нет надобности создавать массивы. Это не касается тех случаев, когда у вас много однотипных объектов, но, думаю, в этом случае у вас массив будет создан по другим причинам
1
|
|
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
|
| 05.09.2012, 14:09 [ТС] | |
|
А можно где-нибудь посмотреть на код подобной конструкции? А то опыта очень и очень мало, и на ум мне приходят только вот такие низкоуровневые идеи, которые не очень подходят для решения данной ситуации =(
P.S. А откуда у меня ссылки на все эти объекты? Я до сих пор чтоб обратиться от одного класса к объектам другого использовал либо массивы с контейнерами, либо аргументы
0
|
|
|
Модератор
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
|
||||||||||||
| 06.09.2012, 12:27 | ||||||||||||
|
getTimer возвращает время, которое прошло с момента запуска приложения. Если вы ставите на паузу, начинайте считать время от этого момента и записывайте его в переменную. В дальнейшем рассчеты производите за вычитом значения, записанного в переменную. Записывать в каждом кадре смысла нет (если только вы в каждом кадре не нуждаетесь в этой информации), это достаточно делать по запросу.
1
|
||||||||||||
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
||
| 06.09.2012, 13:35 [ТС] | ||
|
TanaTiX, всегда, когда я обращался к объектам таким образом мне писали что-то вроде:
0
|
||
|
Модератор
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
|
|
| 06.09.2012, 13:57 | |
|
Defake, значит у вас объект того типа не имел указанного свойства. Покажите пример.
0
|
|
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
|||||||
| 06.09.2012, 14:19 [ТС] | |||||||
|
Именно таких примеров сейчас нет. Т.к. я их всегда убирал, чтоб не было ошибок. Но вот что-то похожее:
0
|
|||||||
|
Модератор
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
|
||
| 06.09.2012, 14:26 | ||
Во-вторых, что возвращает свойство parent? DisplayObjectContainer. А у этого объекта есть свойство theGameState? Нет. И не важно, что оно на самом деле есть (или может быть, упор на "может быть"), компилятор видит тип объекта, смотрит на свойства, к которым пытаются обратиться и те, которые реально есть - и выдает ошибку. Почитайте про ООП.
0
|
||
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
|
| 06.09.2012, 14:32 [ТС] | |
|
А как мне в таком случае из дочернего объекта обратиться к свойству родителя, не используя аргументы?
P.S. Итак психанул и продолжил строить ВиртуальныйЗоопарк по книжечке =D
0
|
|
|
Модератор
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
|
||
| 06.09.2012, 16:23 | ||
|
0
|
||
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
|
| 06.09.2012, 19:43 [ТС] | |
|
При определенном событии в дочернем объекте мне нужно, чтобы выполнилась определенная функция в объекте родительском. Как иначе это сделать?
0
|
|
|
Модератор
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
|
|
| 06.09.2012, 21:15 | |
|
Подписаться на это событие у дочернего объекта, или из дочернего объекта отправить всплывающее событие, или реализовать подписку с помощью колбэка, или еще пара-тройка способов, возможных и зависящих от реализации.
1
|
|
| 06.09.2012, 21:15 | |
|
Помогаю со студенческими работами здесь
15
Синие и черные экраны в браузерных играх, одноклассниках и оффлайн играх машина состояний Поиск в пространстве состояний
Диаграммы действий и состояний Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|