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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.10.2009, 17:08
LA_ вне форума Посмотреть профиль Отправить личное сообщение для LA_ Найти все сообщения от LA_
  № 1  
Ответить с цитированием
LA_

Регистрация: Jun 2009
Сообщений: 64
По умолчанию Ожидание наступления события и таймаут

Подскажите, плз, как правильнее организовать ожидание наступления события в игре и таймаут, если событие не наступило.
Например, необходимо дождаться присоединения какого-нить игрока к игре.

Как сделано у меня пока:
Код AS3:
private function checkGamerPresence() {
  if (UserNotPresent) { 
    // нужного игрока нет, проверяем раз в 1 сек
    _timeout_id_user_presence = setTimeout(checkGamerPresence, 1000);
  }
  else
  {
    // нужный игрок появился, останавливаем таймер
    clearTimeout(_timeout_id_user_presence);
  }
}
Вопросы - насколько верен такой подход?
Как добавить таймаут? Ввести некий counter и подсчитывать сколько раз мы делали проверку?

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

Регистрация: Sep 2002
Сообщений: 30,784
Как игрок появляется, должно произойти событие PLAYER_ADDED.

Старый 18.10.2009, 21:35
LA_ вне форума Посмотреть профиль Отправить личное сообщение для LA_ Найти все сообщения от LA_
  № 3  
Ответить с цитированием
LA_

Регистрация: Jun 2009
Сообщений: 64
etc, а каковы преимущества Вашего подхода?
просто, например, пока игрока нет - ничего происходить не должно.

и, таймаут с event'ом как организовать? что-то не очень понятно...

PS. возможно, мой пример со входом пользователя не очень удачен.
как быть в случае если, например, другим игрокам нужно ожидать хода одного игрока?


Последний раз редактировалось LA_; 18.10.2009 в 21:53.
Старый 18.10.2009, 22:24
.true вне форума Посмотреть профиль Отправить личное сообщение для .true Посетить домашнюю страницу .true Найти все сообщения от .true
  № 4  
Ответить с цитированием
.true
 
Аватар для .true

Регистрация: Oct 2009
Адрес: Москва
Сообщений: 73
Отправить сообщение для .true с помощью ICQ
Может я не так понял, но.

По поводу примера выше преимущество примера etc нет таймера, который тут лишний.
К примеру. Загрузка игры -> известно что должно быть 8 игроков. при событии PLAYER_ADDED для каждого игрока увеличиваем переменную на 1 и сразу проверяем если она равна 8 то начинаем.

Если ожидать хода игрока - то таймаут нужен только в случае обрыва связи(если человек неактивен >= 5 мин){делаем кик.}

в другом случае при наступлении события(действия) игрока. В тех же шашках можно ожидать максимум 5 минут (к примеру). Но игрок может сходить за 10 секунд. В этом случае глупо ждать 5 минут.
__________________
Если ты не часть решения, тогда ты – часть проблемы.

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

Регистрация: Jun 2009
Сообщений: 64
Цитата:
в другом случае при наступлении события(действия) игрока. В тех же шашках можно ожидать максимум 5 минут (к примеру). Но игрок может сходить за 10 секунд. В этом случае глупо ждать 5 минут.
это да. поэтому в моем коде таймер срабатывает каждую секунду.
а вот как аналогичное (отсутствие хода в заданное время) обработать с помощью event'ов?


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

Регистрация: Sep 2002
Сообщений: 30,784
В смысле «как»? Взять и обработать, пришёл игрок, значит пришёл.

Старый 19.10.2009, 00:03
LA_ вне форума Посмотреть профиль Отправить личное сообщение для LA_ Найти все сообщения от LA_
  № 7  
Ответить с цитированием
LA_

Регистрация: Jun 2009
Сообщений: 64
etc, с приходом-то как раз все понятно. как отследить событие, что за заданное время он не пришел?

или, Timer'ом опять-таки? т.е. запустить таймер и проверять (например) каждую секунду не пришел ли игрок / не сделал ли ход, если пришел / сделал, то останавливать таймер, если же не пришел / не сделал, то наступает событие TimerEvent.TIMER_COMPLETE

что-то типа
Код AS3:
// ждать хода
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.
Старый 19.10.2009, 00:09
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Что значит «за заданное время не пришёл»? Не пришёл, так и хрен с ним.

Старый 19.10.2009, 00:37
LA_ вне форума Посмотреть профиль Отправить личное сообщение для LA_ Найти все сообщения от LA_
  № 9  
Ответить с цитированием
LA_

Регистрация: Jun 2009
Сообщений: 64
etc, давайте все-таки тогда рассматривать вариант не с приходом игрока, а с его ходом, когда важно сделал он ход или нет
(хотя и в случае с приходом результат тоже может быть важен - например, как писал .true, для начала игры нужно 8 игроков, остальные игроки, допустим, ждут 5 минут - если восемь игроков не собралось, то можно им показать какое-нить другое сообщение, например)

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

Регистрация: Sep 2002
Сообщений: 30,784
Он сделал ход, отправил на сервак, сервак всем остальных оповестил.

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

Теги
проверка , событие , Таймер

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

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


 


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


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