Кто-нибудь может предложить эффективную функцию вращения, которая может быть остановлена ​​по требованию? - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть круговая диаграмма 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 в цикле по времени, с каким-то интерполяционным эффектом? И в течение некоторого определенного периода времени, чтобы соответствовать периоду времени цикла.

Однако это за мной, если у кого-то есть что-то, чтобы предложить / сказать по этому поводу, я был бы очень признателен.

Спасибо!

1 Ответ

3 голосов
/ 12 февраля 2011

Вам следует рассмотреть возможность использования библиотеки Tweening, например TweenLite или Tweener . Вы можете изменить любой параметр любого объекта с течением времени, используя их, и они используют один цикл кадра / таймера для всех анимаций в любое время.

...