Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Скроллер ускоряется не понятно почему. (http://www.flasher.ru/forum/showthread.php?t=82902)

pkfun 23.07.2006 22:41

Скроллер ускоряется не понятно почему.
 
Вложений: 1
При многократном открытии скроллера( зашел в скроллер - вышел, зашел - вышел) ускоряются все процессы связанные с прокруткой: прокрутка кнопками ускоряется, мышью тоже. А по задумке не должно быть такого. Может поглядите fla и скажете свои соображения?

Вложение 14808

К посту приложил файл в раре. В нем fla, swf, txt, html. Вобщем все, что может понадобится чтобы понять проблему. Версия флэш - 8.
Работает так. Открываете. Перед вами пустое поле с кнопкой text. Щелкаете по нему. Появляется скроллер( поле с текстом). Доступна прокрутка мышью и кнопками вверх/вниз на клаве. Покрутите. Посмотрите скорость в первое открытие. Затем щелкните по кнопке back. Скроллер пропадет. Повторите все это раз 10. Посмотрите как изменилась скорость скролла как мышью, так и кнопками. Даже не знаю, что делать. :(
В коде в fla я постарался все подробно расписать, что происходит, какая строка что делает.

silin 23.07.2006 23:06

интервал /clearInterval(scrollFs)/ не очищается потому как scrollFs не видна из sc.butBck.onPress
определи scrollFs чтоб видно было и другим, типа
Код:

var scrollFs;//будет видна и в др. функуциях
textLoader.onLoad = function():Void  {
        .........
        //var scrollFs = setInterval(scrollFns, 5);//локальная переменная, снаружи не видна
        scrollFs = setInterval(scrollFns, 5);//
               
};


pkfun 25.07.2006 21:37

Вложений: 1
silin
Спасибо. Действительно цикл не останавливался. Все сделал как ты сказал. Теперь останавливается. :)
В связи с этим хотел еще спросить. clearInterval, как я понял, не трэйсится. Как правильно проверять его остановку? Я вставлял в функцию, которую запускал setInterval, какой-нибудь трэйс(trace("work"), напр.) и смотрел когда функция работает, а когда нет. Еще есть какие-нибудь способы?
Далее. Насчет ускорения я тоже разобрался. Прежде всего почитал в help flash 8 про оператор delete. Вот, что там написано(относительно моего случая):

You cannot delete predefined objects and properties, and you cannot delete variables that are declared within a function with the var statement. You cannot use the delete operator to remove movie clips.

Ну а я удалял листенеры, которые были определены внутри функции(onLoad). Они, естественно, не удалялись. И при повторном запуске функции scrollF появлялись новые объекты, слушающие события кнопок и мыши и работали эти объекты все вместе. Т.е. один раз жму на кнопку, события слушает уже, напр. 3 объекта и каждый из них срабатывает.
Когда я это понял, то сразу нашел и использовал метод removeListener. Еще раз проверил трэйсами, вставленными в функции keyLs.onKeyDown и mouseListener.onMouseWheel. Все нормально.

Вложение 14840

Приложил к посту исправленный код. Погляди, если будет желание, может какие еще недочеты есть.
ps. Еще раз спасибо за отклик. :)


Часовой пояс GMT +4, время: 12:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.