После прочтения вашего кода, да, вы правы.b () выполняется при достижении этой строки кода.
У меня может возникнуть желание создать очередь методов для выполнения.Выполните один, проверьте, есть ли у вас время для выполнения другого, прежде чем фрейм нуждается в обновлении, и повторите.Вы всегда можете вставить новые команды в очередь в любое время, поэтому b () может вставить endB () следующим в очереди.
Оба секвенсора на http://www.dpdk.nl/opensource/running-tasks-in-order-with-a-task-based-sequence-manager и http://as3.casalib.org/docs/org_casalib_time_Sequence.html должен делать то, что вам нужно.Первый может быть немного излишним, так как похоже, что вам нужно создавать отдельные классы для каждой из ваших задач, что может быть слишком много накладных расходов.С другой стороны, условные задачи выглядят именно так, как вам нужно.Последнее проще в том, что вы можете указать методы для выполнения.Тем не менее, кажется, что не существует встроенного способа для задания задач, но это может быть так же просто, как создать задачу, которая условно добавляет задачи.
Это может помочь узнать немного больше, как работают условия.
Другие вопросы:
Хвостовые вызовы не очень эффективны в AS.Думайте об этом как о добавлении большего в стек каждый раз, когда вы вызываете метод.Как только метод возвращается (даже если вы явно не используете return
), метод удаляется из стека, и ранее вызванный метод будет продолжать выполняться.Таким образом, чем больше хвостовых вызовов, тем больше стек и тем больше нужно очистить.
Как только вы начинаете выполнять код, проигрыватель зависает, пока код полностью не запустится и выполнение не вернется к проигрывателю.У вас есть около 15 секунд на выполнение, прежде чем игрок убьет ваш сценарий, поэтому вы должны учитывать это при бесконечном выполнении кода.Решение состоит в том, чтобы выполнить некоторый код, а затем дождаться следующего кадра, чтобы выполнить больше.
Вам не нужно заново создавать таймеры, вы можете создать их один раз как переменные экземпляра и просто вызвать start.Таймеры вернут выполнение проигрывателю (если больше не будет выполнено ни одного вызова метода).
Несколько упрощенная версия, но я уверен, что вы поняли.
ДОБАВЛЕНИЕ: Я думаю, что выследует обратиться к шаблону команд (http://en.wikipedia.org/wiki/Command_pattern).. Вы можете хранить массив команд, которые должны быть выполнены (синхронно или асинхронно), а когда одна из них возвращает или отправляет завершенное событие, вы выполняете следующую. Я думаю, вы можете создатьпростая реализация шаблона команд, позволяющая делать то, что вам нужно, без лишних затрат на секвенсоры, о которых я упоминал ранее, но всегда полезно получить представление о том, как это сделали другие.