Я хотел бы отложить обработку некоторых захваченных событий в ActionScript до определенного времени. Прямо сейчас, я вставляю их в массив, когда его захватывают и проходят через него, когда это необходимо, но это кажется неэффективным. Есть лучший способ сделать это?Задержка обработки событий во Flash
ответ
Ну, для меня это кажется чистым и эффективным способом сделать это.
Что вы подразумеваете под задержкой? вы имеете в виду просто обрабатывать их позже или обрабатывать их по истечении заданного времени?
Вы всегда можете установить временную привязку к фактической функции обработки в обработчике событий (используя flash.utils.setTimeout
), чтобы обработать событие в определенный момент времени. Но это может стать неэффективным, так как у вас может быть много тайм-аутов, которые нужно обрабатывать во время выполнения.
Возможно, вы могли бы указать свои потребности немного больше.
редактировать:
Ok, в основном, флэш-плеер однопоточен - это исполнения байткода однопоточно. И любое событие, которое отправляется, обрабатывается немедленно, то есть dispatchEvent(someEvent)
будет напрямую вызывать все зарегистрированные обработчики (таким образом, байт-код AS).
Теперь есть события, которые фактически генерируются в фоновом режиме. Они поступают либо из I/O (network, userinput), либо из таймеров (TimerEvents). Может случиться, что некоторые из этих событий на самом деле происходят, тогда как байт-код выполняется. Обычно это происходит в фоновом потоке, который передает событие (в абстрактном смысле этого слова) в основной поток через (де) очередь.
Если основной поток занят выполнением байт-кода, он будет игнорировать эти сообщения до тех пор, пока это не будет выполнено (обратите внимание: почти любое выполнение байт-кода всегда является неявным следствием события (будь то ввод кадра или ввода или таймер или операции загрузки или что-то еще)). Когда он простаивает, он будет выглядеть во всех очередях, пока не найдет доступное сообщение, обертывает информацию в объект события ActionScript и отправляет ее, как описано ранее.
Таким образом, эта очередь представляет собой механизм очень низкого уровня, который поступает из потока-потоковой связи (и появляется во многих сценариях с несколькими потоками) и недоступен для вас.
Но, как я уже говорил, ваш подход действителен и имеет смысл.
Обработка их позже, по собственному усмотрению. Я не уверен, но я слышал, что события, нуждающиеся в обработке, уже хранятся в какой-то очереди. Есть ли способ получить доступ к этой очереди напрямую, вместо того, чтобы полагаться на вторую очередь? – Archagon
хранить их в вектор вместо массива: р
Я думаю, что это все о том, как структурировать вашу программу, может быть, вы можете присвоить захваченное событие по соответствующей инстанции? Так что естественно обрабатывать захваченное событие с ним вместо запроса из глобального вектора
сообщение отредактировано ... надеюсь, что ответит на вопрос ... :) – back2dos
Я предполагаю, что это не события пользовательского интерфейса, а файл загрузка событий полного типа? onsoundcomplete нравится? – Assembler
Спасибо, дос! Ассемблер, он предназначен для платформы с фиксированной частотой вращения. Я хочу, чтобы все входные события обрабатывались в начале каждого нового кадра. – Archagon