|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
Ожидание наступления события и таймаут
Подскажите, плз, как правильнее организовать ожидание наступления события в игре и таймаут, если событие не наступило.
Например, необходимо дождаться присоединения какого-нить игрока к игре. Как сделано у меня пока: private function checkGamerPresence() { if (UserNotPresent) { // нужного игрока нет, проверяем раз в 1 сек _timeout_id_user_presence = setTimeout(checkGamerPresence, 1000); } else { // нужный игрок появился, останавливаем таймер clearTimeout(_timeout_id_user_presence); } } Как добавить таймаут? Ввести некий counter и подсчитывать сколько раз мы делали проверку? |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Как игрок появляется, должно произойти событие PLAYER_ADDED.
|
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
etc, а каковы преимущества Вашего подхода?
просто, например, пока игрока нет - ничего происходить не должно. и, таймаут с event'ом как организовать? что-то не очень понятно... PS. возможно, мой пример со входом пользователя не очень удачен. как быть в случае если, например, другим игрокам нужно ожидать хода одного игрока? Последний раз редактировалось LA_; 18.10.2009 в 21:53. |
|
|||||
Может я не так понял, но.
По поводу примера выше преимущество примера etc нет таймера, который тут лишний. К примеру. Загрузка игры -> известно что должно быть 8 игроков. при событии PLAYER_ADDED для каждого игрока увеличиваем переменную на 1 и сразу проверяем если она равна 8 то начинаем. Если ожидать хода игрока - то таймаут нужен только в случае обрыва связи(если человек неактивен >= 5 мин){делаем кик.} в другом случае при наступлении события(действия) игрока. В тех же шашках можно ожидать максимум 5 минут (к примеру). Но игрок может сходить за 10 секунд. В этом случае глупо ждать 5 минут.
__________________
Если ты не часть решения, тогда ты – часть проблемы. |
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
Цитата:
а вот как аналогичное (отсутствие хода в заданное время) обработать с помощью event'ов? Последний раз редактировалось LA_; 18.10.2009 в 23:25. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
В смысле «как»? Взять и обработать, пришёл игрок, значит пришёл.
|
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
etc, с приходом-то как раз все понятно. как отследить событие, что за заданное время он не пришел?
или, Timer'ом опять-таки? т.е. запустить таймер и проверять (например) каждую секунду не пришел ли игрок / не сделал ли ход, если пришел / сделал, то останавливать таймер, если же не пришел / не сделал, то наступает событие TimerEvent.TIMER_COMPLETE что-то типа // ждать хода var moveTimer:Timer = new Timer(1000, 300); // проверять каждую секунду в течение 5 минут moveTimer.addEventListener(TimerEvent.TIMER, onCheckMove); moveTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onMoveTimeout); moveTimer.start(); privet function onCheckMove(event:TimerEvent):void { // проверяем наличие хода, // если ход сделан, останавливаем таймер moveTimer.stop(); } public function onMoveTimeout(event:TimerEvent):void { // за отведенное время ход не сделан } Последний раз редактировалось LA_; 19.10.2009 в 00:42. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Что значит «за заданное время не пришёл»? Не пришёл, так и хрен с ним.
|
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
etc, давайте все-таки тогда рассматривать вариант не с приходом игрока, а с его ходом, когда важно сделал он ход или нет
(хотя и в случае с приходом результат тоже может быть важен - например, как писал .true, для начала игры нужно 8 игроков, остальные игроки, допустим, ждут 5 минут - если восемь игроков не собралось, то можно им показать какое-нить другое сообщение, например) |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Он сделал ход, отправил на сервак, сервак всем остальных оповестил.
|
Часовой пояс GMT +4, время: 15:30. |
|
« Предыдущая тема | Следующая тема » |
Теги |
проверка , событие , Таймер |
|
|