Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0 > Статьи

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.09.2010, 22:35
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 1  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Арм... То есть самый главный контроллер, получает команду от коннектора с аргументами и дёргает соответствующие методы у дочерних контроллеров?

Как это реализуется? Динамическим доступом? Был бы очень рад минималистическому примеру :-[

Старый 27.09.2010, 22:43
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Арм... То есть самый главный контроллер, получает команду от коннектора с аргументами и дёргает соответствующие методы у дочерних контроллеров?

Как это реализуется? Динамическим доступом? Был бы очень рад минималистическому примеру :-[
Ничего он не дергает, он передает событие с привязанной командой всем желающим. Имя события составное, например command_enterAccount, где enterAccount — имя команды, он же метод основного контроллера (если есть).

Старый 27.09.2010, 22:57
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 3  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Так, проясняется.
Сюжет: пришло событие, что человек вошел на аккаунт. Коннектор распарсил его и сообщил как то это главному контроллеру (как? Событием?). Главный контроллер выстрелил событие, содержащее команду, которую подхватили все подписчики на это событие и начали делать то, что им следует делать.

Старый 27.09.2010, 23:02
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Так, проясняется.
Сюжет: пришло событие, что человек вошел на аккаунт. Коннектор распарсил его и сообщил как то это главному контроллеру (как? Событием?). Главный контроллер выстрелил событие, содержащее команду, которую подхватили все подписчики на это событие и начали делать то, что им следует делать.
Ещё раз стоит прочитать пост #156, особенно последнее предложение.

Старый 27.09.2010, 23:08
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Да, клиентом, здорово. То есть вызываем паблик метод, хорошо.
А как обращаться к коннектору от маленьких контроллеров? Ссылку на главный контроллер я тяну к дочерним, но тоже большим (например чтобы сказать главному контроллеру что действие закончилось, меняй курилку на игру), поэтому напрямую вызываю метод у главного контроллера, он дёргает коннектор.

UPD: на всякий спрошу, правильное ли у меня понимание клиентов: клиент - это объект, у которого приходящий запрос может дёрнуть какой-нибудь метод.


Последний раз редактировалось Psycho Tiger; 27.09.2010 в 23:22.
Старый 27.09.2010, 23:20
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Да, клиентом, здорово. То есть вызываем паблик метод, хорошо.
А как обращаться к коннектору от маленьких контроллеров?
Подписаться на событие типа CommandEvent, у которого будет ссылка на пришедшую команду.

Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Ссылку на главный контроллер я тяну к дочерним, но тоже большим (например чтобы сказать главному контроллеру что действие закончилось, меняй курилку на игру), поэтому напрямую вызываю метод у главного контроллера, он дёргает коннектор.
Можно и так, а можно оформить методом call, в котором первым аргументом идет имя отправляемой на сервер команды. Вариантов полно.

Старый 27.09.2010, 23:41
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Так. Резюме:
1) пришли данные. Например, враг сделал свой ход и новые координаты врага. Пришли они в коннектор, коннектор их переваривает.
2) После этого коннектор дёргает метод у главного контроллера. Тут логичен вопрос, в каком виде он это делает? На каждый тип действия свой метод (типа атаковали - один метод, написали в чат - другой, пошел дождь - третий)?
3) В главном контроллере испускается событие, что враг походил. Событие содержит новые координаты врага.
4) Контроллер врага, который имеет ссылку на главный контроллер слушал это событие и переместился.
5) Враг нанёс удар, контроллеру надо отправить это на сервер. Он используя ссылку на главный контроллер вызывает у него метод call с необходимыми параметрами. (когда я говорил "напрямую вызываю метод у главного контроллера, он дёргает коннектор" я имел ввиду что вызываю метод подобный call, где описываю всё что я хочу отослать).

Поправь пожалуйста, где на этот раз ошибся. И спасибо большое за помощь)

Старый 28.09.2010, 12:22
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
1) Коннектор без понятия, что конкретно пришло, он распознает это всё как команду и только;
2) Вызывает moveEnemy(id, x, y), точнее (this._client[command.name] as Function).apply(this._client, command /* Command extends Array */);
3) Нет, событие идет new CommandEvent('command_' + command.name, ..., command). Его на самом деле отправляет коннектор после вызова команды у client, а контроллер тупо редиректит;
4) У врага контроллера нет, есть модель EnemyData, у неё тупо метод moveTo(x, y), его вызывает либо основной контроллер, либо дочерний, скажем, боевки;
5) Удары наносит сервер. Действия же игрока отправляются через основной контроллер, используя его метод call. Внутри call пришедшие аргументы перенаправляются в коннектор для отправки в виде команды на сервер.

Старый 28.09.2010, 12:48
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Ага, резюме 2.0:
1) Коннектору приходит пакет. Он видит, что это команда, отделяет имя команды от её аргументов, создаёт экземпляр класса Command. В _client он хранит ссылку на главный контроллер. У главного контроллера открыты методы для коннектора, имя метода совпадает с именем команды (или зная команду можно узнать имя метода).
2) Коннектор дёргает метод, сопоставленной этой команде у контроллера.
3) Коннектор испускает событие CommandEvent, которое главный контроллер редиспатчит, чтобы его поймали все кто хотят.
4) Понятно, а в случае чего-то мелкого, что требует взаимодействия с сервером, но содержащее контроллер - что слушает главный контроллер? Модель или контроллер? В каких случаях всё-таки слушает, а в каких контроллер старший вызывает методы напрямую?
5) Любой объект, который хочет общаться с сервером ловит ссылку на главный контроллер и дёргает его метод call.

У меня вопрос по пункту 2-3: зачем дёргать сначала метод у клиента, а потом слать через него событие? По сути можно обойтись одним событием, который главный контроллер схватит первым. Можно одним вызовом у клиента - клиент сам сделает событие.

Старый 28.09.2010, 12:55
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
4) Ничего не слушает, ему по барабану в таком случае. Младший контроллер подпишется на конкретное событие CommandEvent и работает с пришедшим событием;
5) Только младшие контроллеры.

Событие не через метод шлется, а следующей строкой после вызова метода, в коннекторе.

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:52.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.