2009-06-05 2 views
0

Я хотел бы отложить обработку некоторых захваченных событий в ActionScript до определенного времени. Прямо сейчас, я вставляю их в массив, когда его захватывают и проходят через него, когда это необходимо, но это кажется неэффективным. Есть лучший способ сделать это?Задержка обработки событий во Flash

+0

сообщение отредактировано ... надеюсь, что ответит на вопрос ... :) – back2dos

+0

Я предполагаю, что это не события пользовательского интерфейса, а файл загрузка событий полного типа? onsoundcomplete нравится? – Assembler

+0

Спасибо, дос! Ассемблер, он предназначен для платформы с фиксированной частотой вращения. Я хочу, чтобы все входные события обрабатывались в начале каждого нового кадра. – Archagon

ответ

2

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

Вы всегда можете установить временную привязку к фактической функции обработки в обработчике событий (используя flash.utils.setTimeout), чтобы обработать событие в определенный момент времени. Но это может стать неэффективным, так как у вас может быть много тайм-аутов, которые нужно обрабатывать во время выполнения.

Возможно, вы могли бы указать свои потребности немного больше.

редактировать:

Ok, в основном, флэш-плеер однопоточен - это исполнения байткода однопоточно. И любое событие, которое отправляется, обрабатывается немедленно, то есть dispatchEvent(someEvent) будет напрямую вызывать все зарегистрированные обработчики (таким образом, байт-код AS).

Теперь есть события, которые фактически генерируются в фоновом режиме. Они поступают либо из I/O (network, userinput), либо из таймеров (TimerEvents). Может случиться, что некоторые из этих событий на самом деле происходят, тогда как байт-код выполняется. Обычно это происходит в фоновом потоке, который передает событие (в абстрактном смысле этого слова) в основной поток через (де) очередь.

Если основной поток занят выполнением байт-кода, он будет игнорировать эти сообщения до тех пор, пока это не будет выполнено (обратите внимание: почти любое выполнение байт-кода всегда является неявным следствием события (будь то ввод кадра или ввода или таймер или операции загрузки или что-то еще)). Когда он простаивает, он будет выглядеть во всех очередях, пока не найдет доступное сообщение, обертывает информацию в объект события ActionScript и отправляет ее, как описано ранее.

Таким образом, эта очередь представляет собой механизм очень низкого уровня, который поступает из потока-потоковой связи (и появляется во многих сценариях с несколькими потоками) и недоступен для вас.

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

+0

Обработка их позже, по собственному усмотрению. Я не уверен, но я слышал, что события, нуждающиеся в обработке, уже хранятся в какой-то очереди. Есть ли способ получить доступ к этой очереди напрямую, вместо того, чтобы полагаться на вторую очередь? – Archagon

0

хранить их в вектор вместо массива: р

Я думаю, что это все о том, как структурировать вашу программу, может быть, вы можете присвоить захваченное событие по соответствующей инстанции? Так что естественно обрабатывать захваченное событие с ним вместо запроса из глобального вектора