![]() |
Ожидание удовлетворительного пользовательского ввода
Здравствуйте.
Я реализую алгоритм по следующей схеме: Код AS3:
Я немного запутался. Как бы вы посоветовали мне это правильно реализовать? |
Такие конструкции в AS3 не используются, а если и используются, то только с большущими костылями.
Если вам принципиальна конструкция, предлагаю написать 2-3 метода, которые организуют то, что вам нужно, вызывая друг друга циклически. Мне кажется, или те, кто были новичками 2 года назад в AS3, стали задавать ещё более странные вопросы? Развёрнутый ответ: События в AS3 используют асинхронный режим. Та конструкция, которую привели вы используется только в языках, где события синхронны, и ждут события прежде, чем выполнять дальнейший код. В AS3 вы подписываетесь на событие, и код продолжает выполняться. При этом он выполняется параллельно с вызываемыми коллбеками. |
Цитата:
P. S. Все еще хуже, чем вы думаете. AS3 я стал изучать незадолго до выхода Creative Studio 6, т. е. где-то 3 с половиной года назад). Но Колина Мука я все же читал и об асинхронности событий в AS3 знаю |
Такую конструкцию лучше приберечь для языков с синхронными ивентами, в AS3 им не место, не нужно её реализовывать.
Есть конкретная задача, с которой AS3 справляется легко, а есть надуманные конструкции, которые якобы кажутся понятными, с которыми AS3 не дружит. |
Цитата:
|
Дайте конкретную задачу. Что, например?
|
Цитата:
|
Для этого используются состояния. Но, так как в AS3 нет enum, обычно они перечисляются в целочисленных константах и берут значения 0~∞.
Каждый кадр происходит switch по текущему состоянию, и в зависимости от него выполняются конкретные действия. После ввода игрока, вы переключаете состояние, и продолжаете всё, что надо, затем переключаете состояние снова. Код AS3:
|
Цитата:
И что есть состояния? |
Цитата:
https://ru.wikipedia.org/wiki/%D0%90...BD%D0%B8%D0%B5 |
Цитата:
Код AS3:
Код AS3:
По вашему варианту вам следует подписаться на события клавиатуры, тогда при нажатии клавиши будет срабатывать функция, а в ней вы уже проверяете что нажал игрок и какое действие/бездействие будет, т.е. будет switch, в которое заносится кнопка нажатая игроком и будет сравниваться со значениями стоящими в case, если будет совпадение, то выполняется соответствующий код. Раз у вас есть перезарядка и мана, то стоит дополнить дополнительными условиями, тот же switch или if и проверять наличие маны и перезарядку и выполнять соответствующие инструкции |
Спасибо за палочки, но я все же смог разобраться в ответе ZackMercury
|
Цитата:
|
Разве нет? Значит, ошибся.
Думаю, самым надёжным будет подписка на события клавиатуры и по нажатию Enter отписка и смена состояния Например Код AS3:
|
Вот такую проверку
Цитата:
Да и вообще, зачем добавлять слушатель клавиатуры в энтерфрейме, а потом отписываться от него? Смысл? Можно подписаться на ввод клавиатуры заранее, а потом вообще не отписываться от него. Достаточно будет какого-то простого флага, типа if (isInputAllowed) в методое обработчика, чтобы определить можно что-то вводить с клавиатуры или нет. Не думал, что такая простая задача вызовет такое бурное обсуждение) |
Цитата:
WAITING PROCESSING_INPUT AUTOPLAY В PROCESSING_INPUT совершается переход, только если текущее состояние является WAITING |
Цитата:
|
Цитата:
Добавлено через 4 часа 38 минут Проблема: выполнение цикла останавливается после диспетчеризации события и не возобновляется после окончания приемника Добавлено через 21 час 21 минуту Я переписал код для ENTER_FRAME и проблема исчезла. Теперь я понял, что выполнение кода после диспетчеризации события останавливается полностью и не возобновляется само. Спасибо всем |
| Часовой пояс GMT +4, время: 16:26. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.