5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
||||||
1 | ||||||
Менеджер состояний (Пауза в играх)05.09.2012, 11:27. Показов 1890. Ответов 14
Метки нет (Все метки)
Набрел на статью "Пишем игровой движок". И вот цитата оттуда:
0
|
05.09.2012, 11:27 | |
Ответы с готовыми решениями:
14
Менеджер состояний игры Пауза на 7 секунд или пауза до нажатия клавиши Синий экран в онлайн играх, в офлайн играх синего экрана нет Синие и черные экраны в браузерных играх, одноклассниках и оффлайн играх |
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
|
|
05.09.2012, 11:46 | 2 |
Не дай бог!
А при чем здесь клавиша? В каждый класс, которому это необходимо, но не в каждую функцию. Т.е. некий глобальный контроллер запускает метод pause у всех заинтересованных. В вашем случае этот метод будет вызван 3 раза, или даже 1 (только для объектов, связанных с текущим состоянием). В данном случае возможно стоит применить другой подход. Вычислять текущее время каждый раз, когда это будет актуально. Для этого используем getTimer.
1
|
214 / 80 / 2
Регистрация: 31.05.2011
Сообщений: 258
|
|
05.09.2012, 12:13 | 3 |
Фактически при паузе вам необходимо останавливать все звуки, ставить на паузу запущенные эффекты, ставить на паузу все таймеры и (если необходимо) отображать диалог паузы в игре. Для централизованного контроля всех этих штук можно создать сервисы (сервис по контролю над всеми звуками, сервис который контролирует эффекты и т.д.) и подписать их на событие в каком-нить глобальном контейнере, сообщающее нам, что пауза включена (или отключена). После диспетчерезации этого события, все подписанные на него сервисы принимают необходимые меры для обеспечения функционала паузы.
1
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
||||||
05.09.2012, 12:19 [ТС] | 4 | |||||
То есть создаем класс StateManager. При создании любых объектов, они добавляются в некий массив, который будет доступен классу StateManager. При изменении состояния класс StateManager отслеживает это и на каждый объект ставит паузу. Так?
0
|
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
|
|
05.09.2012, 12:42 | 5 |
Defake, нет, в этом случае у вас получится большая связанность между различными узлами программы. А каждый модуль должен быть в какой-то степени самодостаточным. Так что все необходимые приготовления должны быть произведены внутри каждого модуля. А т.к. внутри у вас есть ссылки на все интересующие объекты, то нет надобности создавать массивы. Это не касается тех случаев, когда у вас много однотипных объектов, но, думаю, в этом случае у вас массив будет создан по другим причинам
1
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
|
05.09.2012, 14:09 [ТС] | 6 |
А можно где-нибудь посмотреть на код подобной конструкции? А то опыта очень и очень мало, и на ум мне приходят только вот такие низкоуровневые идеи, которые не очень подходят для решения данной ситуации =(
P.S. А откуда у меня ссылки на все эти объекты? Я до сих пор чтоб обратиться от одного класса к объектам другого использовал либо массивы с контейнерами, либо аргументы
0
|
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
|
|||||||||||
06.09.2012, 12:27 | 7 | ||||||||||
getTimer возвращает время, которое прошло с момента запуска приложения. Если вы ставите на паузу, начинайте считать время от этого момента и записывайте его в переменную. В дальнейшем рассчеты производите за вычитом значения, записанного в переменную. Записывать в каждом кадре смысла нет (если только вы в каждом кадре не нуждаетесь в этой информации), это достаточно делать по запросу.
1
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
|
06.09.2012, 13:35 [ТС] | 8 |
TanaTiX, всегда, когда я обращался к объектам таким образом мне писали что-то вроде:
0
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
||||||
06.09.2012, 14:19 [ТС] | 10 | |||||
Именно таких примеров сейчас нет. Т.к. я их всегда убирал, чтоб не было ошибок. Но вот что-то похожее:
0
|
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
|
|
06.09.2012, 14:26 | 11 |
Во-вторых, что возвращает свойство parent? DisplayObjectContainer. А у этого объекта есть свойство theGameState? Нет. И не важно, что оно на самом деле есть (или может быть, упор на "может быть"), компилятор видит тип объекта, смотрит на свойства, к которым пытаются обратиться и те, которые реально есть - и выдает ошибку. Почитайте про ООП.
0
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
|
06.09.2012, 14:32 [ТС] | 12 |
А как мне в таком случае из дочернего объекта обратиться к свойству родителя, не используя аргументы?
P.S. Итак психанул и продолжил строить ВиртуальныйЗоопарк по книжечке =D
0
|
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
|
|
06.09.2012, 19:43 [ТС] | 14 |
При определенном событии в дочернем объекте мне нужно, чтобы выполнилась определенная функция в объекте родительском. Как иначе это сделать?
0
|
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
|
|
06.09.2012, 21:15 | 15 |
Подписаться на это событие у дочернего объекта, или из дочернего объекта отправить всплывающее событие, или реализовать подписку с помощью колбэка, или еще пара-тройка способов, возможных и зависящих от реализации.
1
|
06.09.2012, 21:15 | |
06.09.2012, 21:15 | |
Помогаю со студенческими работами здесь
15
машина состояний Поиск в пространстве состояний Массив состояний заказа Диаграммы действий и состояний Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |