Обновление экрана при событиях

Особенностью Flash-плейера является то, что все изменения отображаются на экране только при загрузке нового кадра. Если вы сделаете клип прозрачным, поменяете его размер или переместите его, то зритель увидит эти изменения не тогда, когда будут поданы команды, а лишь при переходе проигрывателя на новый кадр. В общем, описанная особенность оправданна с точки зрения экономии ресурсов компьютера, и чаще всего она абсолютно незаметна, так как частота смены кадров, принятая по умолчанию (12 кадров в секунду), весьма высока по сравнению с реакцией нашего зрения. Однако порой бывает необходимо, чтобы изменения отображались максимально быстро, не дожидаясь загрузки нового кадра. Так, в играх реакция на действия пользователя должна быть предельно оперативной. Иначе какие-то события могут просто не отобразиться. Чтобы понять, с какими трудностями можно столкнуться при разработке подобных проектов, создайте клип с именем mov и, задав частоту кадров равной 1 кадру в секунду, наберите следующий код:

mov.onMouseMove = function():Void {
this._xscale = this._yscale += 1; // При движении мыши клип должен
// плавно увеличиваться
};

Войдя в режим тестирования и сделав несколько движений мышью, вы увидите, что клип увеличивается не плавно, а резкими рывками.


Это связано с тем, что его изображение обновляется всего раз в секунду, а за это время он успевает существенно «подрасти».

Чтобы обновить экран внепланово по какому-то событию, нужно использовать уже знакомую нам по циклам функции setInterval() функцию updateAfterEvent(). Добавив ее вызов в код созданного обработчика, мы увидим, что изменение размеров клипа стало постепенным:

mov.onMouseMove = function():Void {
this._xscale = this._yscale += 1;
updateAfterEvent(); // Экран обновляется гораздо чаще функция updateAfterEvent() может быть применена в обработчиках событий в стиле Flash MX, обработчиках on и onClipEvent Flash 5, а также в функциях, вызываемых циклически при помощи setInterval(). Во всех остальных позициях updateAfterEvent() игнорируется.

Единственными объектами, вид которых обновляется асинхронно проигрыванию кадров, являются кнопки, Поэтому переход в состояние Hit или Down происходит при соответствующих действиях со стороны пользователя мгновенно вне зависимости от установленной частоты кадров.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Модель событий Flash 5
Модель событий Генератор—Листенеры
Событийные методы
Ядром модели событий Генератор – Листенеры Flash MX 2004

Вернуться в раздел: Action Script / 8. События