Може ли някой да предложи функция за ефективно въртене на движение, която може да бъде спряна при поискване?

Имам mxml кръгова диаграма, която бих искал да завъртя бавно преди щракване на бутон, но при щракване тя трябва да спре незабавно (или поне сравнително бързо) и след това етикетите на допълнителното описание се въвеждат с избледняване.

Експериментирах и с двете функции на таймера, за да постигна това:

protected function group1_creationCompleteHandler(event:FlexEvent):void
        {
            var rt:Timer = new Timer(20,0);
            rt.addEventListener(TimerEvent.TIMER, rtt);

            rt.start()
        }

        private function rtt(event:TimerEvent):void
        {
            QPieSeries.startAngle -=1;
        }

както и вариант callLater, който дава (не е изненадващо) същия ефект:

protected function group1_creationCompleteHandler(event:FlexEvent):void
        {
            rtt();
        }

        private function rtt():void
        {
            QPieSeries.startAngle -=1;
            callLater(rtt);
        }

Моят проблем обаче е, че и двата метода за постигане на този ефект са много лоши по отношение на производителността, което е разбираемо с големия брой събития, които многократно се задействат и получават.

Опитвам се да използвам подхода var rotateVar:Rotate = new Rotate(QPieSeries), но проблемът идва, когато го спра, етикетите не съвпадат със сегментите, без да прилагам метода QPieSeries.startAngle, и това има навика да води до скокове и т.н. и като цяло разваля нещата когато се прилага във всякакъв вид цикъл.

Мисля, че това, което наистина искам да направя (е, в това, че може да доведе до жизнеспособно решение), е някакъв вид QPieSeries.startAngle = 60 във времеви цикъл, с някакъв вид интерполиращ ефект, който се случва? И през някакъв определен период от време, за да съответства на периода от време на цикъла.

Това обаче не е по силите ми, ако някой има какво да предложи/каже по този въпрос, ще съм много благодарен.

Благодаря!


person Joshua    schedule 12.02.2011    source източник
comment
Има ли причина да не използвате Event.ENTER_FRAME? Така или иначе това е единственият път, когато ще преначертаете.   -  person jswolf19    schedule 12.02.2011
comment
Освен това каква версия на flex използвате?   -  person jswolf19    schedule 12.02.2011
comment
Event.ENTER_FRAME звучи интересно, ще го пробвам, когато имам възможност, въпреки че не съм сигурен дали ще осигури подобрението, което търся... Мисля, че Greensock също звучи като добър залог. Благодаря   -  person Joshua    schedule 12.02.2011


Отговори (1)


Трябва да обмислите използването на библиотека Tweening, като TweenLite или Tweener. Можете да променяте всеки параметър на всеки обект с течение на времето, като ги използвате, и те използват един цикъл на рамка/таймер за всички анимации по всяко време.

person weltraumpirat    schedule 12.02.2011