Цитата:
Сообщение от __i
Расскажи плз эту длинную историю, может найдем более простой выход
|
Значит так, когда мы кодим что-то на флеше, часто возникает необходимость в том что бы какие-то свойства менялись плавно, или менялись земедленно, или менялись и колебались. Например шарик колеблещийся около курсора, при движении курсора этот шарик как на резинке следует за мышью. Бывает необходимость плавно, или с замедлением изменять альфа канал. Т.е. нам нужно плавно менять какие-то свойства. Например что бы плавно менять координату x, на нужно писать большой кусок кода с функцией которая вызывается по событие enterFrame и делает много всяких проверок. У меня сейчас в проекте таких элементов штук 50, где альфу надо плавно сменить, где координаты, в барчартах - надо плавно менять высоту. То есть , это какие-то объекты, возвращающие тип Number и эти намберы надо плавно менять. Возникла идея написать класс ингибитор, который позволяет ставить функции замедления на какие-либо свойства. Юзинг этого класса я представляю себе так:
Код:
inh = new Inhibitor();
inh.inhibit(anyObject, 'x', inhibitFunction, param)
anyObject.x = 50;
То есть класс ингибитор имеет статичный метод inhibit который в любом объекте замедляет изменение любого свойства. В моём примере первый аргумент - объект, второй - свойство в этом объекте, третий - функция ингибирования, которая будет вызываться по enterFrame, остальные аргументы - какие-топараметры для функции ингибирования. После этого, свойство х плавно меняет своё значение, от кадра к кадру. Достаточно один раз написать функцию ингибирования, простота написания кода существенно возрастёт.
Но, вот в чём проблема. На мой объект anyObject уже имеется туча ссылок, этот объект много где юзается. То есть изменение свойства х, из любой точки программы долно вызвать плавное изменение х.
Самым разумным ,на мой взягляд, выходом было сделать следующее:
после вызова метода, класс inhibitor копирует геттер и сеттер свойства х куда-нибудь, например в геттеры и сеттеры свойства temp (что бы можно было потом его менять), потом ингибитор вставляет на место свойства х геттеры и сеттеры, которые вызывают функцию ингибирования, которая в свою очередь плавно меняет свойство temp. Бредятина конечно, но на АС 1/2 это реализовать несложно, а вот с тройкой проблемы.
Создание нового прокси объекта-обёртки, который будет перехватывать свойства, не очень удачный выход. Т.к. старые ссылки на объект будут по-прежнему менять оригинальное свойство скачкообразно.