Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Плавное движение изображения (не работает у меня) (http://www.flasher.ru/forum/showthread.php?t=161040)

shimra 20.07.2011 00:33

Плавное движение изображения (не работает у меня)
 
Вечер добрый , друзья.
Делаю банер.В котором ну прям все все все должно двигаться так как хочет заказчик.
И вот проблема - нужно двигать текст примерно со скорость движения фона и примерно в том же направлении.
Попробовал реализовать на первом слайде :
http://rk-software.pl/banner3/
Заказчик очень не доволен: говорит очень плохо!!видны дерганья и рывки в движении текста.
Код такой :

Код AS3:

private function showtextforfirst(evt:TimerEvent):void
                {
                                                Text1_mc=new Text1();
                                                holder4_mc.addChild(Text1_mc);
                                                holder4_mc.x = 60;
                                                holder4_mc.y = 20;
                                                TransitionManager.start(holder4_mc,{type:Fade, direction:Transition.IN,
                        duration:1.5,easing:None.easeNone});
                                                startMoveTextTimer();
              }
 
private function startMoveTextTimer():void
                {
                        if(timer!=null)
                                timer.reset();
                        timer=new Timer(1000,1);
                        timer.addEventListener(TimerEvent.TIMER,movetext);
                        timer.start();
                }
 
 
                private function movetext(evt:TimerEvent):void
                {
                        Tweener.addTween(Text1_mc, {x:400, y:500,scaleX:3, scaleY: 3, time:200, transition:"linear"});
                }

!!Помогите кто чем может !!

coffee2espresso 20.07.2011 08:41

UpdateAfterEvent тебе в помощь.

Vektor 20.07.2011 10:46

Так сойдет?
Код AS3:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.utils.Timer;
        import flash.text.TextField;
        public class Move extends MovieClip {
                private var _mcNew:MovieClip=new MovieClip;
                public function Move() {
                        addChild(_mcNew);
                        _mcNew.x=100;
                        _mcNew.y=100;
                        var field:TextField=new TextField();
                        field.text="Привет";
                        _mcNew.addChild(field);
                        var timer:Timer=new Timer(1);
                        timer.addEventListener(TimerEvent.TIMER,onTimer);
                        timer.start();
                }
                public function onTimer(evt:TimerEvent):void {
                        _mcNew.x++;
                        evt.updateAfterEvent();
                }
        }
}

З.Ы -Лучше в Timer() не выставлять больших значений на движения от1-10 думаю достаточно в зависимости от скорости.

fish_r 20.07.2011 11:26

Таймер ниже 16 реально не может работать.
Привяжите анимацию не к таймеру, а к кадрам, или, для начала, попробуйте поднять fps.
Или воспользуйтесь сторонними плагинами - твинами, напр. GreenSock.

MXPain 20.07.2011 12:06

сколько у вас частота кадров стоит?

shimra 20.07.2011 12:38

Привет Vektor! Спасибо за код!!!
Возможно я не разобрался но по прежнему сохраняется видимость движения ((
изменил некоторые параметры под себя и движение вновь пошло с заскоками:
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.display.*;
        import flash.events.*;
        import flash.utils.Timer;
        import flash.text.TextField;
 
        public class main extends MovieClip {
 
                private var _mcNew:MovieClip=new MovieClip;
 
                public function main()
                {
                        addChild(_mcNew);
                        _mcNew.x=100;
                        _mcNew.y=100;
                        var field:TextField=new TextField();
                        field.text="Привет";
                        _mcNew.addChild(field);
                        var timer:Timer=new Timer(100);
                        timer.addEventListener(TimerEvent.TIMER,onTimer);
                        timer.start();
                }
                public function onTimer(evt:TimerEvent):void {
                        _mcNew.x++;
                        _mcNew.y++;
                        evt.updateAfterEvent();
                }
        }
 
}

И это при том что шрифт текст мал.

arkadattx 20.07.2011 12:47

Обновление у вас идет с частотой 10fps. Рекомендуемый минимум - 24

fljot 20.07.2011 12:48

Чтобы текст двигался плавнее, нужно выставить ему antialiasing for animation

shimra 20.07.2011 12:48

Цитата:

Сообщение от fish_r (Сообщение 1013109)
Таймер ниже 16 реально не может работать.
Привяжите анимацию не к таймеру, а к кадрам, или, для начала, попробуйте поднять fps.
Или воспользуйтесь сторонними плагинами - твинами, напр. GreenSock.

Здравствуйте!
Исходя из вашей ссылки мой таймер получает переменные delay= 1000 миллисекунд(= 1 секунда) и repeat = 1 раз. Я не сам до этого дошел подсмотрел где-то в интернете.Теперь только так и пользуюсь создаю таймер и константы для него :
Код AS3:

                private const SPEED:int=10;
                private const SPEEDTEXT:int=4;
                ...........................................
                ...........................................
                                        private function startDisplayTimerHide():void
                {
                        if(timer!=null)
                                timer.reset();
                        timer=new Timer(SPEED*1000,1);
                        timer.addEventListener(TimerEvent.TIMER,hideImageStart();
                        timer.start();
                }

А насчет твинов что только не использовал :
Код AS3:

                private function movetext(evt:TimerEvent):void
                {
                        Tweener.addTween(Text1_mc, {x:400, y:500,scaleX:3, scaleY: 3, time:200, transition:"linear"});
                        //TweenPlugin.activate([TransformMatrixPlugin]);
                        //TweenPlugin.activate([TransformMatrixPlugin]);
                        //TweenMax.to(Text1_mc, 10, {x:280, y:350, roundProps:["x","y"]});
                        //TweenMax.to(Text1_mc, 300, {transformMatrix:{x:280, y:350, scaleX:3, scaleY:3}});
                        //TweenMax.to(Text1_mc, 600, {transformMatrix:{a:4.3, b:0.04, c:0.02, d:4.12, tx:280}});
                        //TweenMax.to(Text1_mc, 13.75, {transformMatrix:{x:280, y:350, scaleX:4.1, scaleY:4.1, skewX:0}});
                        //TweenMax.to(Text1_mc,600, {y:1000,scaleX:4, scaleY:4});
                }

Все что в комментах тоже не плавно двигается.И если я правильно понял Courina(Tweener) это тоже сторонний класс.
Если честно я в тупике!

shimra 20.07.2011 12:50

Цитата:

Сообщение от MXPain (Сообщение 1013111)
сколько у вас частота кадров стоит?

19 fps

Добавлено через 2 минуты
Цитата:

Сообщение от fljot (Сообщение 1013118)
Чтобы текст двигался плавнее, нужно выставить ему antialiasing for animation

А это где ? Я поставил smoothing а antialiasing for animation не нашёл

Добавлено через 4 минуты
понял где antialiasing for animation но у меня текст в битмап.(( когда был статик текст вообще жесть была

MXPain 20.07.2011 12:56

19 очень мало для плавной анимации, нужно минимум 30 а лучше еще больше

shimra 20.07.2011 13:03

Поставил 120 fps - эли не там поставил или не в этом проблема. Fps поставил в файлике main.fla под TimeLine - вообщем в главном файле fla.

Добавлено через 1 минуту
или fps надо в коде прописывать?

КорДум 20.07.2011 13:24

30 FPS должно хватать. Некоторые браузеры выше 60 FPS не дадут, хотя в стандалоне будет 120. Замените ваш твинер на твины от greensock (возможно в этом дело).
Кроме того, вы двигаете же битмапу еще? Да, я вот посмотрел ваш баннер. Поставьте в свойствах картинки галочку у allowSmooth (или как там она). Текст заэмбедите. Но лучшей отрисовки, сразу говорю, у текста вряд ли получите.

fish_r 20.07.2011 13:29

Цитата:

Сообщение от shimra (Сообщение 1013131)
Поставил 120 fps - эли не там поставил или не в этом проблема. Fps поставил в файлике main.fla под TimeLine - вообщем в главном файле fla.

Добавлено через 1 минуту
или fps надо в коде прописывать?

Слишком большой fps - тоже зло :) Плееру же надо успевать просчитывать. Где прописывать - без разницы.
В основном fps ставят в диапазоне от 25 до 40. Не делайте по Timer() анимацию, это не правильно.
Почитайте выше - что советуют.

shimra 20.07.2011 13:30

Цитата:

Сообщение от КорДум (Сообщение 1013138)
30 FPS должно хватать. Некоторые браузеры выше 60 FPS не дадут, хотя в стандалоне будет 120. Замените ваш твинер на твины от greensock (возможно в этом дело).
Кроме того, вы двигаете же битмапу еще? Да, я вот посмотрел ваш баннер. Поставьте в свойствах картинки галочку у allowSmooth (или как там она). Текст заэмбедите. Но лучшей отрисовки, сразу говорю, у текста вряд ли получите.

Согласен на все сто!Текст реально хуже рисуется поэтому и двигаю картинку.allowSmooth поставил давно - хотелось бы еще что бы картинка вообще была идеальной

Код AS3:

                private function movetext(evt:TimerEvent):void
                {
                        Tweener.addTween(Text1_mc, {x:400, y:500,scaleX:3, scaleY: 3, time:200, transition:"linear"});
                        //TweenPlugin.activate([TransformMatrixPlugin]);
                        //TweenPlugin.activate([TransformMatrixPlugin]);
                        //TweenMax.to(Text1_mc, 10, {x:280, y:350, roundProps:["x","y"]});
                        //TweenMax.to(Text1_mc, 300, {transformMatrix:{x:280, y:350, scaleX:3, scaleY:3}});
                        //TweenMax.to(Text1_mc, 600, {transformMatrix:{a:4.3, b:0.04, c:0.02, d:4.12, tx:280}});
                        //TweenMax.to(Text1_mc, 13.75, {transformMatrix:{x:280, y:350, scaleX:4.1, scaleY:4.1, skewX:0}});
                        //TweenMax.to(Text1_mc,600, {y:1000,scaleX:4, scaleY:4});
                }

Всё что в коментах эфекта не дает..

fish_r 20.07.2011 13:30

Цитата:

Сообщение от КорДум (Сообщение 1013138)
Некоторые браузеры выше 60 FPS не дадут.

Я думал - вообще браузеры выше 60-ти не дают. А, что есть такие которые больше позволяют держать?

КорДум 20.07.2011 13:35

Цитата:

Я думал - вообще браузеры выше 60-ти не дают. А, что есть такие которые больше позволяют держать?
Если не ошибаюсь, IE. У него плагины же через ActiveX.

shimra 20.07.2011 13:35

Цитата:

Сообщение от fish_r (Сообщение 1013140)
Слишком большой fps - тоже зло :) Плееру же надо успевать просчитывать. Где прописывать - без разницы.
В основном fps ставят в диапазоне от 25 до 40. Не делайте по Timer() анимацию, это не правильно.
Почитайте выше - что советуют.

Таймер я поставил на 1000 миллисекунд что дает 1 секунду .Этот таймер для того что бы только через секунду после появления текст начал двигаться.А двигается он у меня по средствам Tweenera.
Или я запутался в конец или не понимаю вообще что люди говорят. Реально вроде бы все попробовал :o

КорДум 20.07.2011 13:39

Цитата:

allowSmooth поставил давно
Что-то не видно. Картинка увеличивается или просто сдвигается? Если второе, то ее масштаб умножьте на 1.001 (или поставьте pixelSnapping в PixelSnapping.NEVER)

fish_r 20.07.2011 13:54

Вложений: 1
Цитата:

Сообщение от КорДум (Сообщение 1013152)
Что-то не видно. Картинка увеличивается или просто сдвигается? Если второе, то ее масштаб умножьте на 1.001 (или поставьте pixelSnapping в PixelSnapping.NEVER)

Да, там в TweenMax-е работа со скале идет. Увеличивается.
По движению картинки. Это ведь jpg да? В настройках импорта снизьте качество. Возможно это даст полож. эффект. Она слишком детализирована.

fish_r 20.07.2011 13:58

Вообще, даже если всё получится, ИМХО, синхронно не смотрится. Лучше сделать асинхронно.


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

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